Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2002.12.26;
Завантажити: [xml.tar.bz2];

Вниз

Потрібно розібратися вираз * .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]

було
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;
було
CurWord: Integer;
I, Len, SLen: Integer;
починати
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;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.6 MB
Час: 0.029 c
14-86178
Acidy
2002-12-07 09:53
2002.12.26
Допоможіть знайти MSDN ...


1-85927
SONY
2002-12-15 12:45
2002.12.26
як послати повідомлення використовуючи mailslot


3-85852
BorisUK
2002-12-06 15:10
2002.12.26
як перервати запит до бази


1-85922
відлуння
2002-12-09 12:23
2002.12.26
лоток


1-85961
Cherepovets
2002-12-15 16:57
2002.12.26
Файл





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська