Code:

{ **** UBPFD *********** by delphibase.endimus  ****

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

 

Зависимости: System

Автор: ALL.exe, Alexe @ 054.pfr.ru, ICQ:161857370, Kostroma

Copyright: ALL.exe

 

***************************************************** }

 

type

TSepArr = arrayofstring; // массив "записей"

 

TSepRec = record

Rec: TSepArr; // сами "записи"

Max: integer; // количество полученных "записей"

end;

 

function GetSeparatorRec(const sRows: string;

cSeparator: char = ','): TSepRec;

var

cCol: arrayof integer;

i, j: integer;

bSTRING: boolean;

begin

Result.Max := -1;

 

j := 1;

bSTRING := False;

SetLength(cCol, j);

cCol[0] := 0;

for i := 1to 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 > 0then

begin

SetLength(Result.Rec, Result.Max + 1);

Result.Rec[0] := IntToStr(Result.Max);

for i := 1to 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"', '');

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить