Форум: "Основная";
Текущий архив: 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