Страница 1 из 1

чтение строк из файла...

Добавлено: 17 фев 2007, 16:07
Сейчас_не_спящий
Всем доброго времени суток.
Проблема такая:
есть Edit1, есть n := Edit1.Text (string), есть переменная "c" (тоже string) и есть файл 1.txt. Содержание файла следующее:

Код: Выделить всё

Свойство детали "ABC"
Тут куча текста1
Свойство детали "DEF"
Тут куча текста2
Свойство детали "GHI"
Тут куча текста3
Свойство детали "JKL" 
Тут куча текста4
Свойство детали "MNO" 
Тут куча текста5
И т.д.
Например, в Edit1 было введено "ABC"
После этого в файле (1.txt) ищется точное совпадение. Но, мало того, что оно должно находить в файле 'свойство детали "' + n + '"'(т.е. Свойство детали "ABC"), так ещё и выделять всё что после строки с "АBС" (т.е. эта строка +1) и до следующего сочетания слов "Свойство детали " в отдельную переменную, например "с".
Т.е. если в Edit1 было введено "АBC" и в 1.txt есть такое сочетание символов, программа записывает в Memo1 следующее:
Memo1.Lines.Add(с), короче результат следующий:

Код: Выделить всё

Тут куча текста1
Но не вот так!(так я и сам могу):

Код: Выделить всё

Тут куча текста1
Свойство детали "DEF"
Тут куча текста2
Свойство детали "GHI"
Тут куча текста3
Свойство детали "JKL" 
Тут куча текста4
Свойство детали "MNO" 
Тут куча текста5
И т.д.
Вот так у меня у самого получается, а как сделать чтобы было выдавало только "Тут куча текста1"?
Т.е. всё что находится между (строка с "ABC" +1) и (строка, содержащая следующее после строки "свойство детали "ABC" словосочетание "свойство делали " -1) должно присваиваться переменной "с".
Как это сделать?
Я пробовал делать так:
1. по файлу ищет 'свойство детали "' + n + '"';
2. когда находит точное совпадание устанавливает фокус на строку с n + 1 (считает следующую как нулевую);
3. с "нулевой" строки ищет 'свойство делали ''' и отнимает от этой 1 строку;
4. как дальше не знаю;
А вообще если у кого-нибудь получиться, просьба скинуть занулёванный (имена всех компонентов и процедур по дефолту и ничего лишнего) unit1.
Заранее благодарю.

Re: чтение строк из файла...

Добавлено: 17 фев 2007, 22:39
Хыиуду

Код: Выделить всё

repeat
  readln(f,s)
until s='Свойство детали "АВС"';
readln(f,s);
repeat
memo1.lines.add(s);
readln(f,s)
until pos('Свойство детали',s)=1;

Re: чтение строк из файла...

Добавлено: 18 фев 2007, 10:21
Сейчас_не_спящий
&quot писал(а):repeat
readln(f,s)
until s='Свойство детали "АВС"';
readln(f,s);
repeat
memo1.lines.add(s);
readln(f,s)
until pos('Свойство детали',s)=1;
...
А рабочий пример поточнее можно?

Re: чтение строк из файла...

Добавлено: 18 фев 2007, 11:13
Хыиуду
Сейчас_не_спящий писал(а):...
А рабочий пример поточнее можно?
Вначале приписать
var f:textfile;s:string;
begin
assignfile(f,'1.txt');
reset(f)
В конце приписать
end;
Положить на форму, допустим, кнопку и мемо. Запихать весь этот код в нажатие кнопки.

Re: чтение строк из файла...

Добавлено: 18 фев 2007, 13:39
Сейчас_не_спящий
&quot писал(а):Вначале приписать
var f:textfile;s:string;
begin
assignfile(f,'1.txt');
reset(f)
В конце приписать
end;
Положить на форму, допустим, кнопку и мемо. Запихать весь этот код в нажатие кнопки.
не работает :(
можешь выложить unit1, может я что-нибудь путаю

Re: чтение строк из файла...

Добавлено: 19 фев 2007, 20:36
Хыиуду

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var s:string; f:textfile;
begin
assignfile(f,'c:\temp.txt');
reset(f);
repeat
readln(f,s)
until s='Свойство детали АБВ';
readln(f,s);
repeat
memo1.lines.add(s);
readln(f,s)
until pos('Свойство детали',s)=1;
end;
На форме кнопка и мемо.

Re: чтение строк из файла...

Добавлено: 13 мар 2007, 10:53
Сейчас_не_спящий
немного не то что я хотел...
У меня получилось сделать то что я хотел, если кому интересно делается это так (я не говорю что других способов нету, но этот, по моему, наиболее приемлем):
вот текcт файла 1.txt:

Код: Выделить всё

abc 1
Описание
Объект 1 выглядит так и так

abc 2
Описание
Объект 2 выглядит так и так

abc 21
Описание
Объект 21 выглядит так и так

	abc 12
Описание
Объект 12 выглядит так и так
на форме лежат едит и мемо
содержимое Unit1.pas:

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
var
  f : TextFile;
  so, s, s1 : string;
  ff, fl : boolean;
begin
  Memo1.Lines.Clear;
  ff := false;
  so := '';
  fl := false;
  s1 := 'abc ' + trim(Edit1.Text);
  AssignFile(f, '1.txt');
  reset(f);
  While (not EOF(f) and not(fl) )do
  begin
    Readln(f, s);
    if trim(s) = s1 then
    begin
      ff := true;
      Readln(f, s);
    end;
    if ff then
    begin
      if Pos('abc', s) > 0 then
      fl:=true
      else memo1.Lines.Add(s);
    end;
  end;
  closefile(f);
end;

end.

Re: чтение строк из файла...

Добавлено: 13 мар 2007, 11:45
LAngel
И почему люди так и не отходут от Паскалевского способа общения с файлами?

ведь можно намного проще читать файлы и оперировать со строками:

[syntax=delphi]var
str: TStringList;
...
begin
str := TStringList.Create;
try
str.LoadFromFile('FileName.ext');
for i := 0 to str.Count-1 do
begin
S := str;
...
end;
finally
str.Free;
end;
end;[/syntax]

Re: чтение строк из файла...

Добавлено: 14 мар 2007, 09:06
Игорь Акопян
LAngel, может файл очень большой ;)