Главная страница
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.01 c
7-7252
Devid
2002-03-09 20:49
2002.06.03
Как получить информацию о видеоадаптере?


1-7072
RDA
2002-05-21 20:15
2002.06.03
Оператор выбора Case


1-7101
saf
2002-05-20 19:27
2002.06.03
преобразование числа


8-7130
vbnz
2002-01-05 18:37
2002.06.03
DELPHIX:TDXSPRITEENJINE


14-7199
-=CrazyFish=-
2002-04-22 11:19
2002.06.03
ZX Spectrum