Datei auslesen/If- vergleich optimieren
Übersicht

![]() |
BenibaerenstarkBetreff: Datei auslesen/If- vergleich optimieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vor allem glaube ich nicht, dass dein Code tut, was er soll...
Code: [AUSKLAPPEN] If XKoord > XMax Then XMax = XKoord
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:
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 Code: [AUSKLAPPEN] If Hoehe > HMax Then
... mit den richtigen Koordinaten zu der Höhe.
HMax = Hoehe XMax = XKoord YMax = YKoord ElseIf Hoehe < HMin Then HMin = Hoehe XMin = XKoord YMin = YKoord EndIf 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! |
||
![]() |
BenibaerenstarkBetreff: Problem Solved |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
FlorianBetreff: Re: Datei auslesen/If- vergleich optimieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group