Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизНУжно разобрать выражение *.gif;*.jpg;*.html;*.php; и т.д. Найти похожие ветки
← →
Кокандокало (2002-12-16 14:42) [0]Подскажите пожалуйста, мастера, есть ли в дельфях какой-нить стринг токенайзер?
Нужно разобрать строку с типами файлов... и вытащить конкретные значения в TStringList
т.е. *.gif;*.jpg;*.html;*.php; превратить в
gif
jpg
html
php
← →
Song (2002-12-16 14:45) [1]Ну дык Text:=StringReplace(Text,";*.",#13#10,[rfReplaceAll]); и последний символ потом стереть..
← →
Calm (2002-12-16 14:45) [2]Стандартного нет.
Но ведь проще задачи не бывает.
Проходишь от начала строки до конца и выделяешь слова. Значащием символы - латинские буквы, разделители - пробел, *,;.
В чем проблема?
← →
Кокандокало (2002-12-16 15:03) [3]а как? ты предлагаешь посимвольно разбирать строку? А точно другого способа нет?
← →
Calm (2002-12-16 15:06) [4]Любой способ к кончено итоге сведется к посимвольной обработке. Это можно возложить на какой-нибуль компонент или делать самому, но все равно посимвольно нужно смотреть.
← →
asmith (2002-12-16 15:53) [5]var
lst : TStringList;
...
lst := TStringList.Create();
lst.Delimiter := ";";
lst.DelimitedText := "*.gif;*.jpg;*.html;*.php;";
for i := 0 to lst.Items.Count - 1 do
strToken := lst[i];
...
← →
Nikolay M. (2002-12-16 17:11) [6]В RX есть прекрасная функция ExtractDelimited. Если RX под рукой нет, вот, выдрал:
function ExtractDelimited(N: Integer; const S: string;
const Delims: TCharSet): string;
var
CurWord: Integer;
I, Len, SLen: Integer;
begin
CurWord := 0;
I := 1;
Len := 0;
SLen := Length(S);
SetLength(Result, 0);
while (I <= SLen) and (CurWord <> N) do begin
if S[I] in Delims then Inc(CurWord)
else begin
if CurWord = N - 1 then begin
Inc(Len);
SetLength(Result, Len);
Result[Len] := S[I];
end;
end;
Inc(I);
end;
end;
← →
id_privin (2002-12-16 17:47) [7]Есть неплохой, правда не безглючный класс. Называется TRegExpr.
Ищеться яндексом. Решает большинство проблем. Правда иногда очень медлено (посравнению с перлом).
← →
Юрий Зотов (2002-12-16 18:53) [8]Народ, вы, прежде чем ответить, предыдущие ответы читаете? Все делается в одну простейшую строку, без всяких дополнительных библиотек и компонентов, и без всякого самопального парсинга.
См. самый первый ответ - Song © (16.12.02 14:45). О чем еще после этого нужно дискутировать, непонятно.
← →
Song (2002-12-16 20:07) [9]И действительно :)
Ну, кстати я ещё забыл, что нужно первые 2 символа стереть :) - <*.>
← →
Кокандокало (2002-12-16 21:11) [10]Дык в том то и дело, что метод Song"a превращает string в string, а не string в TStringList... Ну ладно.. извините.. просто хотел убедится, что в дельфи аппрарат по обработке строк бействительно скуден.. Нет тебе никаких токенайзеров...
Эээх..
Всем спасибо..
2id_privin: спасибо.. поищу, попробую..
← →
Song (2002-12-16 21:19) [11]2Кокандокало (16.12.02 21:11)
Почему не стринглист? Это смотря как применять.. я же не зря свойство Text-то написал, думал вы догадаетесь..
Var Str:TStringList;
S:String;
Str:= TStringList.Create;
With Str Do
try
S:="*.gif;*.jpg;*.html;*.php;";
S:=StringReplace(S,";*.",#13#10,[rfReplaceAll]);
Delete(S,1,2);
Delete(S,Length(S),1);
Text:=S;
ShowMessage(Text);
finally
Str.Free;
end;
← →
Song (2002-12-16 21:25) [12]ай-ай-ай...
Надо перед Delete поставить "System.", а то он не тот delete будет иметь ввиду :)
← →
Юрий Зотов (2002-12-16 23:06) [13]> Кокандокало (16.12.02 21:11)
> Дык в том то и дело, что метод Song"a превращает string в
> string, а не string в TStringList...
Батенька, а дела-то плохи... Справочку по TStrings поcмотреть не помешало бы...
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c