![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разделение строки на слова. [D6, WinXP]
PaRL. © (2002-11-10 20:53:00)Этот вопрос тут уже был по-моему много раз.
Скажите ещё раз пожалуйста.
то есть "Привет всем" - в StringList слова занести "привет" и "всем"
snake1977 (2002-11-11 14:16:00) [1]вот пришлось когдато написать , есть аналог STRTOK но в СИ++
разбивает строку на лексемы
n- номер лексемы
s- строка исходник
l- разделитель лексем
результат - лексема
например st:=GetLex(3,"Всем программистам привет"," ");
результат = "привет";
или
например st:=GetLex(3,"Всем@@!программистам@@!привет","@@!");
результат = "привет";
Function GetLex(n:Integer; s:String; l:String):String;
Var i:Integer;
lx,st:String;
Begin
If S<>"" Then
Begin
lx:="";
i:=1;
st:=s;
Delete(st,Length(l)+1,Length(st)-Length(l));
While (st<>l) and (s<>"") do
Begin
lx:=lx+s[1];
Inc(i);
Delete(s,1,1);
st:=s;
Delete(st,Length(l)+1,Length(st)-Length(l));
End;
Delete(s,1,Length(l));
If n>1 Then lx:=GetLex(n-1,s,l);
End
Else
lx:="";
GetLex:=lx;
End;
Alex44 (2002-11-11 13:47:00) [2]ExtractStrings
Song (2002-11-11 13:18:00) [3]2Separator © (11.11.02 09:37)
Из СПб в Москву через Хабаровск...
Separator (2002-11-11 10:24:00) [4]после этого форума еще и поиск файлов по маске
Separator (2002-11-11 10:22:00) [5]:)
KoluChi (2002-11-11 10:15:00) [6]Ну разделение - это наверное стихия Separatorа :)
Separator (2002-11-11 09:37:00) [7]Во че я тут сделал:
type
TDelimiter = set of #32..#255;
procedure ConvertStr(const DelimitedText: string; const Delimeters: TDelimiter; List: TStrings);
var
i, Len, Prev: word;
begin
Len:= 1;
Prev:= 0;
for i:= 1 to Length(DelimitedText) do
if Prev <> 0 then
begin
if DelimitedText[i] in Delimeters then
begin
if Len = 0 then
Prev:= i + 1
else
begin
List.Add(copy(DelimitedText, Prev, Len));
Len:= 0;
Prev:= i + 1
end
end
else
Inc(Len)
end
else if not (DelimitedText[i] in Delimeters) then
Prev:= i;
if Len > 0 then
List.Add(copy(DelimitedText, Prev, Len));
end;
Пример использования:
ConvertStr(" Привет Народ! Как жизнь? У меня все ок.", [" ", "!", "?", "."], ListBox1.Items);
Song (2002-11-11 08:59:00) [8]Замени пробелы на #13#10, в результате слова рассортируются по строкам.
Дмитрий К.К. (2002-11-11 08:28:00) [9]Где-то на сайте http://delphibase.endimus.com/была такая функция.
apay (2002-11-11 00:30:00) [10]вся фишка в тои, что разделителем слов может быть не только пробел. в сях есть ф-я strtok(...) для выдергивания слов, в дельфях я такой не встречал. надо писать самому.
2 Anatoly Podgoretsky
вообще-то надо
StringList.Delimiter := " ";
StringList.DelimitedText := "Привет всем";
Anatoly Podgoretsky (2002-11-10 21:17:00) [11]StringList.CommaText := "Привет всем"
OxOTHuK (2002-11-10 21:05:00) [12]var s,s1,s2: string; i: integer;
begin
s:="Привет всем";
i:=pos(s," "); //ищем пробел и запоминаем его позицию
s1:=copy(s,1,i-1); //Копируем часть строки до первого пробела
s2:=copy(s,i,lenght(s)-i); //копируем все от пробела и до конца
end;
такое прокатит если у тебя в строке 2 слова и разделены пробелом, а если больше то только ЦИКЛ (и я подозреваю что не один)... на вопрос я ответил...