Расщепление строки с разделителями на массив строк

Расщепление строки с разделителями на массив строк

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Расщепление строки с разделителями на массив строк
Зависимости: System
Автор: ALL.exe, <a href="mailto:Alexe@054.pfr.ru">Alexe@054.pfr.ru</a>, ICQ:161857370, Kostroma
Copyright: ALL.exe
Дата: 13 марта 2003 г.
***************************************************** }

type
 TSepArr = array of string; // массив "записей"
 TSepRec = record
  Rec: TSepArr; // сами "записи"
  Max: integer; // количество полученных "записей"
 end;
function GetSeparatorRec(const sRows: string;
 cSeparator: char = ','): TSepRec;
var
 cCol: array of integer;
 i, j: integer;
 bSTRING: boolean;
begin
 Result.Max := -1;
 j := 1;
 bSTRING := False;
 SetLength(cCol, j);
 cCol[0] := 0;
 for i := 1 to Length(sRows) do
 begin
  if sRows[i] = '"' then
  bSTRING := not bSTRING;
  if (sRows[i] = cSeparator) and (not bSTRING) then
  begin
  j := j + 1;
  SetLength(cCol, j);
  cCol[j - 1] := i;
  end;
 end;
 j := j + 1;
 SetLength(cCol, j);
 cCol[j - 1] := Length(sRows) + 1;
 Result.Max := High(cCol);
 if Result.Max > 0 then
 begin
  SetLength(Result.Rec, Result.Max + 1);
  Result.Rec[0] := IntToStr(Result.Max);
  for i := 1 to Result.Max do
  Result.Rec[i] := Copy(sRows, cCol[i - 1] + 1, cCol[i] - cCol[i - 1] - 1);
 end;
end;
//Пример использования:
var
 R: TSepRec;
begin
 R := GetSeparatorRec('123.45-ABCDEF-"A-B-C"-"0"-', '-');
// результат:
 R.Max = 5;
 R.Rec = ('5', '123.45', 'ABCDEF', '"A;B;C"', '"0"', '');

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

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