Даю тебе свою функция по разделению строки на строки типа TStringList, её я написал ещё когда был зелен в делфи, можнт она не самая быстрая, но зато работает:
Код:
function ADsplitString(s:String;p:String;d:Char):TStringList;
//s - сама строка которую надо разделить
//p - что разделяет слова
//d - группирование строк, например если p=| а d=" то если в кавычках a|b|c|"d|e|h"... есть | то они будут игнорироватся
var
i: Integer;
t: Boolean;
ss: String;
c: String;
procedure DelQuotMarks(var Str: String);
begin
if(AnsiStartsText(d,Str))then Str := AnsiMidStr(Str, 2, MAXLONG);
if(AnsiEndsText(d, Str))then Str := AnsiMidStr(Str, 1, length(Str)-1);
end;
begin
ss := s;
Result := TStringList.Create;
t := false;
//c := s[1];
for i:=1 to length(ss)do begin
//s[i]
if(t)and(ss[i]=d)then begin
t := false; //заканчивается группирование
//c := c + ss[i];
end
else if(ss[i]=d)then t := true; //начинается
if(p=' ')then begin
//SPACE + TAB
if not(t)and(ss[i]=p)or(ss[i]=#9)then begin
if(c='')or(c=d)or(c=d+d)then else
Result.Add(c);
c := '';
end else c := c + ss[i];
end else begin
//OTHER
if not(t)and(ss[i]=p)then begin
if(c='')or(c=d)or(c=d+d)then else
Result.Add(c);
c := '';
end else c := c + ss[i];
end;
if(i=length(ss))then Result.Add(c);
end;
for i:=0 to Result.Count-1 do begin
ss := Result[i];
DelQuotMarks(ss);
Result[i] := ss;
end;
end;