Как разделить строку на элементы, Аналог VB функции Split

Previous  Top  Next

    
 

 

Вариант 1.

 

В Дельфи есть специальный класс для хранения массивов строк - TStringList - очень рекомендую. Вот как вашу строку превратить в TStringList:

 

Объявление переменной

 

Code:

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;

 

 

©Drkb::00141

Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)

Взято с Vingrad.ru http://forum.vingrad.ru

 

 

 


Вариант 2. Используем стандартные массивы:

 

Code:

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 (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)

 

Взято с Vingrad.ru http://forum.vingrad.ru

 

 


 

Code:

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;

 

 

 

©Drkb::00142

Автор: Fantasist

Взято с Vingrad.ru http://forum.vingrad.ru

 

 


См. также Парсинг строк