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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

Всем доброго времени суток.
Проблема такая:
есть 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.
Заранее благодарю.
Всё не знает никто, но важно найти того кто знает нужное...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

repeat
  readln(f,s)
until s='Свойство детали "АВС"';
readln(f,s);
repeat
memo1.lines.add(s);
readln(f,s)
until pos('Свойство детали',s)=1;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

&quot писал(а):repeat
readln(f,s)
until s='Свойство детали "АВС"';
readln(f,s);
repeat
memo1.lines.add(s);
readln(f,s)
until pos('Свойство детали',s)=1;
...
А рабочий пример поточнее можно?
Всё не знает никто, но важно найти того кто знает нужное...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Сейчас_не_спящий писал(а):...
А рабочий пример поточнее можно?
Вначале приписать
var f:textfile;s:string;
begin
assignfile(f,'1.txt');
reset(f)
В конце приписать
end;
Положить на форму, допустим, кнопку и мемо. Запихать весь этот код в нажатие кнопки.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

&quot писал(а):Вначале приписать
var f:textfile;s:string;
begin
assignfile(f,'1.txt');
reset(f)
В конце приписать
end;
Положить на форму, допустим, кнопку и мемо. Запихать весь этот код в нажатие кнопки.
не работает :(
можешь выложить unit1, может я что-нибудь путаю
Всё не знает никто, но важно найти того кто знает нужное...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

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;
На форме кнопка и мемо.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

немного не то что я хотел...
У меня получилось сделать то что я хотел, если кому интересно делается это так (я не говорю что других способов нету, но этот, по моему, наиболее приемлем):
вот тек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.
Всё не знает никто, но важно найти того кто знает нужное...
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

И почему люди так и не отходут от Паскалевского способа общения с файлами?

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

[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]
С уважением, Lost Angel...
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

LAngel, может файл очень большой ;)
Изображение
Ответить