Аналог Parse

VMik
Дата: 05.10.2004 12:04:07
Есть ли в Д7 функция подобная указанной ниже?
function Parse( var S: String; const Separators: String ): String; 
Функция ищет в строке S строку Separators и возвращает все что шло до этого разделителя (т.е. до Separators). В строке S удаляется возвращаемая часть и найденный Separators. 
Т.е. если S= '1-2-3',а Separators= '-' то при первом вызове на выходе '1' , а S='2-3'
Если в S нет Separators то возвращаемое значение рано S, а сама S становится пуcтой. 


Спасибо.
ScareCrow
Дата: 05.10.2004 12:11:34
RTFM string handling routines
VMik
Дата: 05.10.2004 12:38:28
ОК.
Попробовал пользовать ExtractStrings. Почти хорошо, но работает с массивом строк.

Есть у кого образец кода, как извлечь подстроки, используя указанный разделитель, используя 1 переменную (в цикле).

for i:=0 to 5 do begin

str_rez := parse(str_in,'/');// Где parse - искомая функция
(FindComponent('Label'+IntToStr(i)) as TLabel).Caption:= str_rez;

end;

Надеюсь, понятно изъяснился...
FEV
Дата: 05.10.2004 12:52:43
VMik
ОК.
Попробовал пользовать ExtractStrings. Почти хорошо, но работает с массивом строк.

Есть у кого образец кода, как извлечь подстроки, используя указанный разделитель, используя 1 переменную (в цикле).

for i:=0 to 5 do begin

str_rez := parse(str_in,'/');// Где parse - искомая функция
(FindComponent('Label'+IntToStr(i)) as TLabel).Caption:= str_rez;

end;

Надеюсь, понятно изъяснился...

Надеюсь, правильно понял ваши изъяснения...
for i:=0 to 5 do 
  begin
    str_rez := copy(str_in, 1, Pos('/', str_in));
    (FindComponent('Label'+IntToStr(i)) as TLabel).Caption:= str_rez;
  end;
Картинка с другого сайта.
Мустиц
Дата: 05.10.2004 13:01:41
function Parse(var S: string; const Separators: string): string;
var
  P: Integer;
begin
  P := Pos(Separators, S);
  if P = 0 then
  begin
    Result := S;
    S := '';
  end
  else begin
    Result := Copy(S, 1, P-1);
    S := Copy(S, P+Length(Separators), Length(S));
  end;
end;
VMik
Дата: 05.10.2004 13:30:53
Спасибо всем.

2 Мустиц - особое спасибо.
2 FEV - ваш способ оставляет в конце результирующей строки символ-разделитель.

Спасибо.
FEV
Дата: 05.10.2004 13:55:34
автор
2 FEV - ваш способ оставляет в конце результирующей строки символ-разделитель.

Для особо ленивых:
str_rez := copy(str_in, 1, Pos('/', str_in)-1);
Картинка с другого сайта.