AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

double Werte aus Strings lesen

Ein Thema von hukopush · begonnen am 24. Mär 2004 · letzter Beitrag vom 24. Mär 2004
Antwort Antwort
hukopush

Registriert seit: 24. Mär 2004
Ort: Lohmar
5 Beiträge
 
Delphi 7 Professional
 
#1

double Werte aus Strings lesen

  Alt 24. Mär 2004, 14:06
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

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 usw.


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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: double Werte aus Strings lesen

  Alt 24. Mär 2004, 14:38
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 *)
Andreas
  Mit Zitat antworten Zitat
hukopush

Registriert seit: 24. Mär 2004
Ort: Lohmar
5 Beiträge
 
Delphi 7 Professional
 
#3

Re: double Werte aus Strings lesen

  Alt 24. Mär 2004, 15:09
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz