Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size
Главная Статьи Текст и Строки Как разделить строку на элементы? (аналог VB функции Split)

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

Оцените материал
(1 Голосовать)

Как разделить строку на элементы? (аналог 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;

 

Вариант 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]);

 

Вариант 3

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;
Прочитано 9596 раз

Авторизация



Счетчики