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

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 27 дек 2012.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Есть файл, в котором есть данные вида
    --->---
    Понедельник (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.

    Так парсю
    Код (Delphi):
    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?
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    :) Не вижу никаких проблем...
    Код (Delphi):
    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;
    Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское... :)
     
  3. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Знал бы как, попробовал бы.
     
Загрузка...

Поделиться этой страницей