Как разделить строку на элементы, Аналог VB функции Split
Вариант 1.
В Дельфи есть специальный класс для хранения массивов строк - TStringList - очень рекомендую. Вот как вашу строку превратить в TStringList:
Объявление переменной
var t:TStringList;
begin
t:=TStringList.create; //создаём класс
t.text:=stringReplace('Ваша строка для разделения',' ',#13#10,[rfReplaceAll]);//мы заменяем все пробелы на символы конца строки
//теперь можно убедится что у вас строка разбина на элементы:
showmessage(t[0]);
showmessage(t[1]);
showmessage(t[2]);
showmessage(t[3]);
...
//после работы надо уничтожить класс
t.free;
Автор Vit
Взято с Vingrad.ru
Вариант 2. Используем стандартные массивы:
var a:
array of string;//наш массив
s:
string;//строка которую мы будем разбивать
begin
s:='Windows Messages SysUtils Variants Classes Graphics Controls Forms';
Repeat //мы постепенно заполняем массив на каждом шаге цикла по 1 элементу
setlength(a,length(a)+1);//увеличиваем размер массива на 1
if pos(' ',s)>0
then //если есть пробел то надо взять слово до пробела
begin
a[length(a)-1]:=copy(s,1, pos(' ',s));//присвоение последнему элементу массива первого слова
s:=copy(s,pos(' ',s)+1, length(s));//удаляем из строки первое слово
end
else//в строке осталось только одно слово
begin
a[length(a)-1]:=s;// присвоим последнее слово
break;//выход из цикла
end;
Until False;//цикл бесконечный, выход изнутри
//теперь проверяем что получили
showmessage(a[0]);
showmessage(a[1]);
showmessage(a[2]);
После использования массива не забудте освободить память a:=nil или setlength(a,0)
Автор Vit
Взято с Vingrad.ru
procedure SplitOnWords(
const s:
string; Delimiters:
set of char; Strings:TStrings);
var
p,sp:PChar;
str:
string;
begin
include(Delimiters,#0); //чтоб уж наверняк
p:=pointer(s);
while true
do
begin
//пропускаем все разделители в начале
while p^
in Delimiters
do
if p^=#0
then
exit
else
inc(p);
sp:=p;
//пока не кончилось слово.
while not (p^
in Delimiters)
do inc(p);
//запоминаем слово
SetLength(str,cardinal(p)-cardinal(sp));
Move(sp^,pointer(str)^,cardinal(p)-cardinal(sp));
Strings.Add(str);
end;
end;
Автор Fantasist
Взято с Vingrad.ru
См. также
Содержание Назад Вперед