Datei auslesen/If- vergleich optimieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Benibaerenstark

Betreff: Datei auslesen/If- vergleich optimieren

BeitragDo, Okt 08, 2009 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen!

Ich möchte eine relativ grosse .cvs datei (180mb, enthält Höheninformationen über die Schweiz in 100m Rasterung) in eine highmap umwandeln. Zunächst wollte ich mir daher maxima/minima der Daten anzeigen lassen. Dies erledige ich mit folgender While-schleife:

Code: [AUSKLAPPEN]
While Not Eof 
 
   ;Aktuelle Zeile anzeigen
    i=i+1
    Print "Zeile: "+i


  ;Zeile auslesen
    Zeile$ =ReadLine$ (Stream)
 
   ;Die Datentrennzeichen finden
    Pos1=Instr (Zeile$, ";" )
     Pos2=Instr (Zeile$, ";",Pos1+1 )
     Pos3=Instr (Zeile$, ";",Pos2+1 )
 
   ;Die Daten auslesen
      XKoord = Mid(Zeile$, 1, Pos1)
     YKoord = Mid(Zeile$, Pos1+1, Pos2)
     Hoehe = Mid(Zeile$, Pos2+1, Pos3)

   ;Vergleich um je das Maximum und das Minimum zu finden
         If XKoord > XMax Then XMax = XKoord
    If XKoord < XMin Then XMin = XKoord
    If YKoord > YMax Then YMax = YKoord
    If YKoord < YMin Then YMin = YKoord
    If Hoehe > HMax Then HMax = Hoehe
    If Hoehe < HMin Then HMin = Hoehe   
 

Wend



Die Daten haben folgende Struktur:
XKoordinate;YKoordinate;Höhe;....Weitere werte die mich nicht interessieren

Die Anzahl Zeilen der Datei ist im 2-Stelligen Millionenbereich... obwohl mein Dualcore (1.8GHz) ca. 1000 Zeilen pro Sekunde bearbeitet läuft es jetzt seit über 2h und ist noch immer nicht fertig. Wie kann ich die Schleife optimieren? Dateizugriff/If-Abfragen?...Weitere möglichkeiten?

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

Xeres

Moderator

BeitragDo, Okt 08, 2009 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor allem glaube ich nicht, dass dein Code tut, was er soll...
Code: [AUSKLAPPEN]
     If XKoord > XMax Then XMax = XKoord
    If XKoord < XMin Then XMin = XKoord
    If YKoord > YMax Then YMax = YKoord
    If YKoord < YMin Then YMin = YKoord
    If Hoehe > HMax Then HMax = Hoehe
    If Hoehe < HMin Then HMin = Hoehe   
X, Y und Höhe sind nicht unabhängig von einander, werden hier aber so behandelt... Die Minimalste und die Maximalste Höhe erhieltest du eher so:
Code: [AUSKLAPPEN]
If Hoehe > HMax Then
   HMax = Hoehe
   XMax = XKoord
   YMax = YKoord
ElseIf Hoehe < HMin Then
   HMin = Hoehe 
   XMin = XKoord
   YMin = YKoord
EndIf
... mit den richtigen Koordinaten zu der Höhe.
Beim Ausführen könnte es noch schneller gehen wenn du die Ausgabe reduzierst, Print weglassen oder nur alle X Zeilen ausgeben z.B.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Benibaerenstark

BeitragDo, Okt 08, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch. Da ich keinerlei Spezifikationen zu den Daten habe (Sie sind leider Undokumentiert), muss ich zuerst herausfinden in welchem Bereich die Daten liegen. Ich möchte nicht wissen, wo die höchste/tiefste Stelle ist, sondern wie hoch die höchste Höhe, wie tief die tiefste Tiefe, wie gross die grösste X-Koordinate, bzw. wie klein die kleinste, analog die Y-Koordinate...
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

Xeres

Moderator

BeitragDo, Okt 08, 2009 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
...okay, dann ist es ja richtig so. Aber kannst du die Datei nicht mit Excel/OpenOffice äquivalent öffnen und die Spalten entsprechen sortieren? Könnte schneller und einfacher sein.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Benibaerenstark

BeitragDo, Okt 08, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis,

es geht aber leider auch nicht... Excel(2003) lädt nur die ersten 65'000 Zeilen... Excel7 kann ca. 4Mio Zeilen gleichzeitig öffnen, habe ich irgendwo gelesen...
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
 

TerrorMachine

BeitragDo, Okt 08, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Schmeiß einfach das Print raus.
Hab bei mir mal einen Vergleich gemacht mit Dateieinlesen:
- Mit Print etwa 5min
- Ohne Print knappe 10 Sekunden

Prints ziehen in Schleifen extrem Leistung!

Benibaerenstark

Betreff: Problem Solved

BeitragDo, Okt 08, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!! Echt krass der Unterschied! Lasse mir jetzt nur noch alle 100'000 Zeilen den aktuellen Status ausgeben...

Problem solved.
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
 

Florian

Betreff: Re: Datei auslesen/If- vergleich optimieren

BeitragFr, Okt 09, 2009 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Code: [AUSKLAPPEN]

While Not Eof(Stream);<-- Das ist der kleine Unterschied!!!


Mit freundlichen Grüßen

Florian

~EDITIERT~

Bitte vermeide zukünftig das Zitieren eines kompletten und langen Beitrags, vorallem wenn dies wie hier völlig unnötig ist. Das stört nur den Lesefluss. MfG D2006

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group