Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите пожалуйста с анализом строки [D5, Win2k]


Smok_er ©   (2002-05-19 02:47:00) 

Уважаемые мастера!
У меня есть одна незадача.
Может кто-нибудь знает, как произвести анализ строки..., т.е.
зная шаблон строки, например:
[%d %s] "%s" - (%d)
получить из записи [125 String] "Str" - (25)
значения всех переменных, т.е.
125
String
Str
25

Помогите пожалуйста, очень надо!


Smok_er   (2002-05-22 00:52:00) [1]

Большое спасибо!
РегЭксп действительно классная вещь!
Вот только поразбираться придется, а то я с рег. выражениями не работал :(


Ev_genus   (2002-05-20 14:52:00) [2]

Правильно, но не тестировано

i:=1;
while s[i]=" " do inc(i);
if s[i]<>"[" then error else inc(i);
buf:="";
while s[i] in ["0".."9"] do begin
buf:=buf+s[i];
inc(i);
end;
v1:=strtoint(buf);
while s[i]=" " do inc(i);
buf:="";
while s[i] <> "]" do begin
buf:=buf+s[i];
inc(i);
end;
v2:=buf;
inc(i);
while s[i]=" " do inc(i);
if s[i]<>""" then error else inc(i);
buf:="";
while s[i]<>""" do begin
buf:=buf+s[i];
inc(i);
end;
v3:=buf;
inc(i);
while s[i]=" " do inc(i);
if s[i]<>"-" then error else inc(i);
while s[i]=" " do inc(i);
if s[i]<>"(" then error else inc(i);
buf:="";
while s[i]<>")" do begin
buf:=buf+s[i];
inc(i);
end;
v4:=strtoint(buf);


-=Sergeante=-   (2002-05-20 14:44:00) [3]

Точнее

\[(\d+) (\w+)\] \"(\w+)\" - \((\d+)\)


-=Sergeante=-   (2002-05-20 14:42:00) [4]

В данном случае регэксп будет типа этого:
\[(\d+) (\w+)\] \"(\w+)\" \((\d+)\)
Получиться как раз требуемый тебе массив с данными.


-=Sergeante=-   (2002-05-20 14:37:00) [5]

Юзай TRegExprТам такая фигня с полтычка решается. Если конечно регулярные выражения знаешь.


Smok_er   (2002-05-20 10:37:00) [6]

> А вот это напряжно, посмотри лучше в SysUtils.pas - Format
Вот это действительно напряжно. Это дипломная, а времени уже почти нет на раздумья и поиски решений :(


Cobalt   (2002-05-20 07:49:00) [7]

>Если можно, то приведи пример.

А вот это напряжно, посмотри лучше в SysUtils.pas - Format


Cobalt   (2002-05-20 07:24:00) [8]

>Если можно, то приведи пример.

А вот это напряжно, посмотри лучше в SysUtils.pas - Format


Smok_er   (2002-05-20 00:53:00) [9]

To Cobalt:
Если можно, то приведи пример. Просто очень большую роль играет скорость этого анализа.

To ~Sergius:
Нет, это не то. Функция Format преобразует строку к заданному шаблону, а здесь нужно наоборот, зная этот шаблон, получить знвчения.


~Sergius   (2002-05-19 17:12:00) [10]


Format ("[%d %s] "%s" - (%d)",[125,"String","Str",25);


Cobalt   (2002-05-19 03:42:00) [11]

Дык, у тебя же уже все сформулировано.
Вначале разбираешь шаблон на свой внутренний формат и проходишь по строке по каждой букве по очереди.
И, конечно, не забыть бы, что строка может и не соответствовать формату.


Наверх

Титульная страница Поиск, карта сайта Написать письмо