Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
4-7274
masanovetc
2002-03-29 15:48
2002.06.03
WinExec


1-6997
SPeller
2002-05-21 12:57
2002.06.03
Бутон обычный ...


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


1-7086
garry
2002-05-22 10:21
2002.06.03
Массивы & EXCEL


8-7132
Dmitrii
2002-01-08 15:46
2002.06.03
Подскажите как прочитать только часть изображения из файла jpg





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский