![]() |
double Werte aus Strings lesen
Hallo Forum,
ich habe schon des öfteren in euren Beiträgen rumgestöbert. Da ich jetzt ein problem habe, bei dem ich selber keine Idee mehr habe, wende ich mich Hilfesuchend an euch!! Mei Problem ist eigentlich nur ein Geschwindigkeitsproblem und zwar lese ich aus einem Ansistring der folgendermassen aufgebaut ist
Delphi-Quellcode:
usw.
1020,686 3566,704 3669,117 3520,530 541,853 1544,589 1789,372 1211,255 0,000 0,000 0,000 0,000 0,000 21,045 19,881 20,764 20,306 20,995 20,318
die Werte folgendermasen in ein Array ein.
Delphi-Quellcode:
var
Hilf1 : Ansisring; aktPos : Longint; for i := 1 to AktMesszahl - 1 do begin while hilf1[aktpos] = ' ' do // alle Leerzeichen rausfiltern inc(aktpos); Hilf2 := ''; while hilf1[aktpos] <> ' ' do begin Hilf2 := Hilf2 + hilf1[aktpos]; inc(aktPos); end; (* while *) DatenArray[AktHeaderzahl-1,aktDatensatz-1,i] := StrToFloat(hilf2); end; (* for *) Da meine Dateien bis zu ca. 1000000 Zeilen obigen Typs(oder mehr Daten) bestehen, kann dies eine sehr Zeitaufwendige Procedure sein. (10000 Zeilen benötigen ca 22 Sekunden auf einem P4 1,8 Ghz) Hat einer eine Idee wie ich dieses einlesen beschleunigen kann? Bin für jede Anregung dankbar Gruß Heiko |
Re: double Werte aus Strings lesen
Der Flaschenhals ist die Zeile
Hilf2 := Hilf2 + hilf1[aktpos]; Jedesmal wird Hilf2 um ein Zeichen verlängert, dabei wird dynamisch neuer Speicher angefordert, der bisherige String an den neuen Platz kopiert, das eine Zeichen angehängt und der alte Speicher freigemacht. Das braucht Zeit !!
Delphi-Quellcode:
var
Hilf1 : Ansisring; aktPos : Longint; for i := 1 to AktMesszahl - 1 do begin while hilf1[aktpos] = ' ' do // alle Leerzeichen rausfiltern inc(aktpos); // die nächsten 15 Zeichen (oder weniger) // als Float lesen DatenArray[AktHeaderzahl-1,aktDatensatz-1,i] := StrToFloat(Copy(hilf1, 1, 15)); // bis zu nächsten Leerzeichen überlesen while hilf1[aktpos] <> ' ' do inc(aktPos); end; (* for *) |
Re: double Werte aus Strings lesen
Vielen Dank für den Tip, aber ich glaube der richtige durchbruch war es noch nicht. Die Lesezeit verkürzte sich bei meinem testcase von 22 auf 19,5 sekunden.
Trotzdem bedanke ich mich bei dir, denn ich hoffe, das noch 10 weitere solcher Beiträge kommen,und ich somit auf 10 sekunden komme!! ;) heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz