Witam. Potrzebuje rozłożyć pewien string na czesci :) Moze na przykladzie:
Dane wejsciowe:
["\"hello world\" ".chr(ord("!"))." ".#13."aaa\nbbb"] (bez [ i ])
Dane wyjsciowe :
\"Hello world\"
chr(ord("!"))
#13
"aaa\nbbb"
Czyli mniej wiecej lamanie ciagu znakow tak zeby przypadkiem nie podzielilo jesli kropka jest pomiedzy cydzyslowiem i zeby ignorowalo takie znaki jak (, ), i kazdy nastepny znak po \ byl sprawdzany osobno i zamieniany na znak (\n na #13 \r na #10 " na " itp). <ort>na razie</ort> wykodzilem cos takiego :
function extractfrom(s: string; deli: char): string;
var
i, j : integer;
naw : integer;
b : boolean;
x, ss : string;
par : tstrlist;
//TStrList - prawie identyczna z TStringList, mozna zamienic na TStringList
begin
x := s + deli;
par.Init;
naw := 0;
b := false;
for i := 1 to length(x) do
begin
if (x[i] = '(') and (not b) then
inc(naw);
if (x[i] = ')') and (not b) then
dec(naw);
if (x[i] = '"') and (x[i - 1] <> '\') then
b := not b;
ss := ss + x[i];
if (x[i] = deli) and (not b) and (naw = 0) then
begin
par.add(stringreplace(copy(ss, 1, length(ss) - 1), '\"', '"',
[rfreplaceall]));
ss := '';
end;
end;
result := par.Text;
end;
W zasadzie ten kod jest dobry, poza tym ze ma problemy z " i czasem sie gubi przy nie poprawnych danych ort!.