Парсинг Данных *.txt

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Есть файл, в котором есть данные вида
--->---
Понедельник (2012-07-21 21:51:13)
Заметки
---<---
Вторник (2012-07-22 00:44:49)
Заметки
Заметки
Заметки
--->---
Среда (2012-07-22 11:31:18)
Заметки
---<---
Четверг (2012-07-22 12:55:59)
--->---
Пятница (2012-12-03 16:38:24)

где --->--- исходящий, ---<--- входящий
Всё это загружается в StringList.

Так парсю
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
sl: tstringlist;
i: integer;
begin
sl := tstringlist.Create;
sl.LoadFromFile('in.txt');
i := 0;
with RichEdit1 do
begin
Clear;
Lines.BeginUpdate;
while i < sl.Count do
begin
if sl[i] = '--->---' then
SelAttributes.Color := clred
else if sl[i] = '---<---' then
SelAttributes.Color := clgreen
else
begin
Lines.Add(sl[i]);
SelAttributes.Color := clblack;
end;
inc(i);
end;
Lines.EndUpdate;
end;
sl.Free;
end;
Получаю
Понедельник (2012-07-21 21:51:13)
Заметки
Вторник (2012-07-22 00:44:49)
Заметки
Заметки
Заметки
Среда (2012-07-22 11:31:18)
Заметки
Четверг (2012-07-22 12:55:59)
Пятница (2012-12-03 16:38:24)

Есть проблема. Нужно, чтобы после --->--- или ---<--- первая строка всегда добавлялась через процедуру обрабоки A, а все последующие до следующего разделителя --->--- или ---<---, или конца содержимого StringList, если нет больше разделителей через процедуру обработки B?
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Есть проблема. Нужно, чтобы после --->--- или ---<--- первая строка всегда добавлялась через процедуру обрабоки A, а все последующие до следующего разделителя --->--- или ---<---, или конца содержимого StringList, если нет больше разделителей через процедуру обработки B?
:) Не вижу никаких проблем...
Код:
procedure A(var S: String);
begin
//S := bla bla...
end;

procedure B(var S: String);
begin
// S := bla bla...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sl: tstringlist;
i: integer;
procA: Boolean;
S: String;
begin
procA := False;
sl := tstringlist.Create;
sl.LoadFromFile('in.txt');
i := 0;
with RichEdit1 do
begin
Clear;
Lines.BeginUpdate;
while i < sl.Count do
begin
S := sl[i];
procA := procA or (S = '--->---') or (S = '---<---');

if (S = '--->---') then
SelAttributes.Color := clred
else if (S = '---<---') then
SelAttributes.Color := clgreen
else
begin
if procA then
begin
procA := False;
A(S);
end
else
B(S);
Lines.Add(S);
SelAttributes.Color := clblack;
end;
inc(i);
end;
Lines.EndUpdate;
end;
sl.Free;
end;
Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское... :)