Процедура Split

Рейтинг: 1Ответов: 1Опубликовано: 08.02.2011

Можете подсказать почему когда я ввожу к примеру '123 456&123', процедура split выдает 3 строки: 123 456 123, хотя я думал что будет 2, ведь разделитель один... Как быть чтоб пробел не читал за разделитель?.. Спасибо)

procedure Split(Delimiter: Char; Str: string; ListOfStrings: TStrings) ;
begin
   ListOfStrings.Clear;
   ListOfStrings.Delimiter     := Delimiter;
   ListOfStrings.DelimitedText := Str;
end;

var
   OutPutList: TStringList;
begin
   OutPutList := TStringList.Create;
   try
     Split('&', '123 456&123', OutPutList) ;
     Writeln(OutPutList.Text);
     Readln;
    finally
     OutPutList.Free;
   end;
end.

Ответы

▲ 5Принят

Надо выставить

ListOfStrings.StrictDelimiter : = True;

http://docwiki.embarcadero.com/VCL/en/Classes.TStrings.StrictDelimiter

Поскольку в старом дельфи нет реализации Split вообще, то придётся либо писать её самому, либо брать готовую. Вот, например, на SO обсуждение этой проблемы и некоторые решения: https://stackoverflow.com/questions/2625707/delphi-how-do-i-split-a-string-into-an-array-of-strings-based-on-a-delimiter

Хотя, ИМХО, учитывая ваши скилы, вам было бы полезно для тренировки написать это самостоятельно.

Общая схема следующая: ищете подстроку Delimiter в исходной строке.. если находите, то вырезаете всё от начала (или предыдущего конца) до той позиции, где нашли подстроку. Вырезанный фрагмент кладёте в список строк (в результат). Если не находится подстрока, то добавляете всё оставшееся в результирующий список.