das meine ich könnte relativ flott sein ....
eine Bremse könnte SetLength(a,High(a)+2);
sein, hier gegf. einfach in größeren Blöcken anfordern und eine Zähler mitlaufen lassen ...
Delphi-Quellcode:
TPointF=Record
x:Double;
y:Double;
End;
TPointArray=Array of TPointF;
mit
Delphi-Quellcode:
Procedure FillArray(var a:TPointarray;Const s:AnsiString);
var
s1,s2:AnsiString;
i,l,x1,x2:Integer;
isFirst:Boolean;
begin
s1 := StringOfChar(#0,10);
s2 := StringOfChar(#0,10);
x1 := 0;
x2 := 0;
i := 1;
l := Length(s);
while i<l do
begin
if s[i] = 'G' then
begin
x1 := 0;
isFirst := true
end
else if s[i] = ',' then
begin
x2 := 0;
isFirst := false;
inc(x1);
s1[x1] := #0;
end
else if s[i] = ';' then
begin
x1 := 0;
inc(x2);
s2[x2] := #0;
SetLength(a,High(a)+2);
a[High(a)].X := StrToFloat(s1);
a[High(a)].Y := StrToFloat(s2);
end
else if s[i] = '.' then
begin
if isFirst then
begin
inc(x1);
s1[x1] := AnsiChar(Decimalseparator);
end
else
begin
inc(x2);
s2[x2] := AnsiChar(Decimalseparator);
end;
end
else if s[i] in ['0'..'9'] then
begin
if isFirst then
begin
inc(x1);
s1[x1] := s[i];
end
else
begin
inc(x2);
s2[x2] := s[i];
end;
end;
inc(i);
end;
end;