Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.01 c
14-86079
Кокандокало
2002-12-06 14:35
2002.12.26
Чем сжимать программы на дельфи ?


14-86127
LazorenkoX
2002-12-04 23:28
2002.12.26
Borland C++ Builder


1-85968
s22_shura
2002-12-15 20:01
2002.12.26
Помогите определиться с потоками


8-86041
Дельфятник
2002-09-09 16:54
2002.12.26
Помогите разобраться с рисованием, пожалуйста.


3-85814
Дмитрий К.К.
2002-12-05 12:33
2002.12.26
---|Ветка была без названия|---