• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Парсинг Данных *.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?
 
S

sinkopa

Есть проблема. Нужно, чтобы после --->--- или ---<--- первая строка всегда добавлялась через процедуру обрабоки 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;
Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское... :)
 
S

Shouldercannon

Вот... Не понимаю правда, почему нельзя энто дело распарсить регуляным выражением... ну да дело хозяйское...
Знал бы как, попробовал бы.
 
S

sinkopa

Знал бы как, попробовал бы.
Ну дык... Было бы желание... :)
(1) Delphi 7 - 2010 : RegExp Studio от Андрея Сорокина




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





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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!