Как разделить строку на элементы, Аналог 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 (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Взято с Vingrad.ru http://forum.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 (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Взято с Vingrad.ru http://forum.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 http://forum.vingrad.ru

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

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...