Заданные позиции сгруппировать в одномерный массив символов. Аналогично, вывести размер полученного массива и сам массив
Категория: Delphi/Pascal
2012-12-05 14:31:33
Имеется произвольный текстовый файл. Заданные позиции (для символа или последовательности символов) сгруппировать в одномерный массив символов (последовательностей символов). Аналогично, вывести размер полученного массива и сам массив.
code: #delphi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; LabeledEdit1: TLabeledEdit; Memo1: TMemo; Button1: TButton; OpenDialog1: TOpenDialog; GroupBox2: TGroupBox; Memo2: TMemo; Button2: TButton; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; Button3: TButton; procedure addSlovosochetania( var lst:TStringList); procedure Poisk(var str:string ; var list: TStringList); procedure Button1Click(Sender: TObject); procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } lineFile: Integer; countNasiv: Integer; masiv: array [word]of string; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.addSlovosochetania( var lst:TStringList); var s: String; begin s := Trim(LabeledEdit1.Text); while pos(',', s) > 0 do begin lst.Add(copy(s, 1, pos(',', s) - 1)); delete(s, 1, pos(',', s)); end; if Trim(s) <> '' then lst.Add(s); end; procedure TForm1.Poisk(var str:string ; var list: TStringList); var i: word; begin for i := 0 to list.Count - 1 do begin if pos(list.Strings[i], str) > 0 then begin Memo1.Lines.Add(list.Strings[i] + ' íàõîäèòñÿ â ñòðîêå = ' + IntToStr(lineFile) + ' ïîçèöèÿ = ' + IntToStr(pos(list.Strings[i], str))); end; end; end; procedure TForm1.Button1Click(Sender: TObject); var openD: TOpenDialog; list: TStringList; f: TextFile; str: string; begin openD := TOpenDialog.Create(nil); openD.Filter := 'òåñêòîâûé ôàéë|*.txt'; if openD.Execute then begin list := TStringList.Create; addSlovosochetania(list); if list.Count > 0 then begin lineFile := 1; AssignFile(f, openD.FileName); Reset(f); while not eof(f) do begin readln(f, str); Poisk(str, list); Inc(lineFile); end; end; end; end; procedure TForm1.LabeledEdit2KeyPress(Sender: TObject; var Key: Char); begin if not(key in ['0' .. '9', #8]) then Key := #0; end; procedure TForm1.Button2Click(Sender: TObject); var openD: TOpenDialog; inn: integer; f: TextFile; str: string; begin if StrToInt(LabeledEdit2.Text) >= StrToInt(LabeledEdit3.Text) then begin ShowMessage('Çíà÷åíèå n áîëüøå m'); Abort; end; openD := TOpenDialog.Create(nil); openD.Filter := 'òåñêòîâûé ôàéë|*.txt'; if openD.Execute then begin lineFile := 1; AssignFile(f, openD.FileName); Reset(f); inn := 0; countNasiv := StrToInt(LabeledEdit3.Text) - StrToInt(LabeledEdit2.Text) + 1; while not eof(f) do begin readln(f, str); if (lineFile >= StrToInt(LabeledEdit2.Text)) and (lineFile <= StrToInt(LabeledEdit3.Text)) then begin masiv[inn] := str; Inc(inn); end; Inc(lineFile); end; end; end; procedure TForm1.Button3Click(Sender: TObject); var i: Integer; begin for i := 0 to countNasiv do Memo2.Lines.Add(masiv[i]); end; end.
автор: MAcK
Поделиться: