strtofloat ist relativ teuer, also ein bisschen Overhead ist nicht so Schlimm.
Das größere Problem aber ist das es kein "ex" Variante gibt die eine Zahl an einer bestimmte Position lesen können ohne Kopieren nach eine separater String. Das macht Speicher Belegung fast immer notwendig. VAL kann eben vom Anfang lesen, und aus "code" kann man lesen wie weit es gekommen ist, also eine val/delete Schleife wäre möglich. Ungetestet:
Code: Alles auswählen
ind:=0;
repeat
val (s,zahl,code);
if code<>1 then // conflict auf erster zahl
begin
zahlen[ind]:=zahl;
inc(ind);
if code>0 then delete(s,1,code-1);
end;
until code=0;
Ich bin mir nicht ganz sicher was passiert wenn (1) der String lehre ist. (2) der letzter Zahl konvertiert wird. Ich weiß auch nicht ob dies so viel schneller ist. Tokenize ähnliche Lösungen (TStringlist inklusive) machen aber immer Mehrere Speicherbelegungen weil es nur ein Notwendig ist.
p.s. Ich habe noch Assembler Routine für den integer Fall aus FPC 0.99.5 bis 0.99.10 Zeiten (
http://www.stack.nl/~marcov/xtdfpc/ und dann xtdfpc19.zip. Es ist nicht ohne Modifikationen mit 2.0+ verwendbar, und nutzt asm Opcodes die heute nicht mehr Modisch sind wie aam ). Früher war nicht immer alles besser
