Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Помогите пожалуйста с анализом строки   Найти похожие ветки 

 
Smok_er   (2002-05-19 02:47) [0]

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

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


 
Cobalt ©   (2002-05-19 03:42) [1]

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


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


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



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

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

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


 
Cobalt ©   (2002-05-20 07:24) [4]

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

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


 
Cobalt ©   (2002-05-20 07:49) [5]

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

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


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

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


 
-=Sergeante=- ©   (2002-05-20 14:37) [7]

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


 
-=Sergeante=- ©   (2002-05-20 14:42) [8]

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


 
-=Sergeante=- ©   (2002-05-20 14:44) [9]

Точнее

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


 
Ev_genus ©   (2002-05-20 14:52) [10]

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

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);


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-7205
lipskiy
2002-04-25 23:15
2002.06.03
Вопрос только Питерцам!


14-7187
lipskiy
2002-04-25 23:12
2002.06.03
Чего, правда это никому не интересно???


8-7121
Voron
2001-12-27 07:41
2002.06.03
И еще вопрос...


1-7104
android
2002-05-22 15:13
2002.06.03
Reboot под Win2k


14-7200
Феликс
2002-04-26 21:05
2002.06.03
OpenGL?