Заданные позиции сгруппировать в одномерный массив символов. Аналогично, вывести размер полученного массива и сам массив

Имеется произвольный текстовый файл. Заданные позиции (для символа или последовательности символов) сгруппировать в одномерный массив символов (последовательностей символов). Аналогично, вывести размер полученного массива и сам массив.

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

Поделиться:

Похожие статьи: