• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы Shouldercannon
  • Дата начала Дата начала
S

Shouldercannon

Есть файл, в котором есть данные вида
--->---
Понедельник (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?
 
Есть проблема. Нужно, чтобы после --->--- или ---<--- первая строка всегда добавлялась через процедуру обрабоки 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;
Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское... :)
 
Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское...
Знал бы как, попробовал бы.
 
Знал бы как, попробовал бы.
Ну дык... Было бы желание... :)
(1) Delphi 7 - 2010 : RegExp Studio от Андрея Сорокина




(2) Delphi XE - XE3 : модуль RegularExpressions.pas





(3) Полезные ссылки:

 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab