Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12227[/thread]

2 Arrays abwechselnd miteinander "verbinden" (Seite 2)

Leser: 5


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Linuxer
 2008-07-24 20:37
#112651 #112651
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Ensretted+2008-07-24 16:30:44--
Habe deinen Code auch ausprobiert Linuxer - hat nach einer kleinen Modifikation geklappt (Dateihandle). Danke.

Allerdings hat die Verarbeitung bei einer Originaldatei ca. 10s gedauert.
Naja..ein Übel muss man wohl sterben ;-)


10 Sekunden für das Parsen einer Datei welcher Größe?
Für 10KiB ist das langsam, für 10GiB schnell... ;o)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Dubu
 2008-07-26 14:50
#112776 #112776
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@Ensretted: Ich glaube, du bist dir gar nicht bewusst, wie ineffizient deine erste Lösung ist! Dort liest du die gesamten 2 GB (oder wieviel auch immer) erstmal in ein Array ein, obwohl deiner Aussage nach die '00'- und '20'-Zeilen nur einen ganz kleinen Teil der Daten ausmachen. Das verbraucht immens viel Speicher (deutlich mehr als 2 GB RAM, je nach mittlerer Zeilenlänge auch das Doppelte) und dauert ziemlich lang. Perl muss halt immer wieder mehr Speicher reservieren für das Array. Wenn dein Rechner dann noch anfängt zu swappen, wartest du vielleicht Stunden darauf, dass er mit dem Einlesen fertig wird. Dann kopierst du die von dir benötigten Daten nochmal in extra Arrays, womit deren Speichermenge nochmal dazu kommen. Und grep selbst ist zwar effizient, aber das heißt nicht, dass man es immer bevorzugen sollte. Vor allem, da du hier sehr gut die Daten schon beim Einlesen auf das Sinnvolle begrenzen kannst.

Nein, nein, da ist sicherlich jede Lösung besser, die die Datei zeilenweise einliest und nur die relevanten Zeilen behält. Und schneller sollte sie auch sein. Hast du es mal verglichen? Vielleicht hast du gar nicht gemerkt, wie viel Zeit perl mit dem Einlesen der Datei verbringt? Zehn Sekunden für 2 GB mit Linuxers Code halte ich für ziemlich fix. Wie lange brauchte denn dein Code, nur der Teil der da schon steht? Oder hast du das Programm noch beim Einlesen abgebrochen, weil sich vorgeblich nichts tat? ;-)
Ensretted
 2008-07-28 16:07
#112834 #112834
User since
2008-07-23
11 Artikel
BenutzerIn
[default_avatar]
Hallo Linuxer, Dubu,
also es war eine ca. 50MB Datei...das gleiche Problem hatte ich unter VB auch schon...ein zeielnweises Einlesen einer Datei dauert immer am längsten.

Unter VB hab ich das Problem so gelöst: Einlesen der ganzen Datei als String.
Unter Perl als Array (oder als String mit Zerlegung(Split) ).
|-> noch ne Möglichkeit?

Habe mittlerweile die verschiedenen Ansätze "kombiniert":
1. lese mit grep zuerst alle speziellen/relevanten Zeilen ein,
2. danach zeilenweise über dieses Array (welches nur die relevanten Zeilen enthält).
Hab allerdings hierfür leider noch keine Zeitmessung.
Mal schauen ob ich noch meinen alten Code habe - für ne Zeitmessung.

Am Anfang hab ich eine 10MB Datei eingelesen, da hat es auch schon 10s gedauert (und ich dachte "Oh Gott, was für ne Sch.."), bis ich darauf gekommen bin, dass die Datei vom USB-Stick gelesen wurde. ;-)
- jetzt sind's von Platte 3s

Was den Speicher angeht...die PCs haben mehr als genug...klar, aufgrund dass wir XP verwenden (max Dateigrösse=2GB), ist das der Worstcase.
I.d.R. haben die Dateien 20-50MB.

10s sind im Rahmen des Erträglichen...bei uns kommt es nur auf Schnelligkeit an (Speicher, Proz.last - spielt keine Rolle: wir haben da noch Möglichkeiten).

Bei einer ca. 100MB Datei brauchte der Code >1min, wobei ich die Zeit gemessen habe, von Start des Programms bis Anfang der Ausgabe (Bildschirm) - muss noch überprüfen, ob von Stick oder Platte.
Meinen Code hab ich aus Angst hier bisher nicht gemessen ;-)

Da ich Perl-Newbie bin, kenne ich natürlich die Feinheiten bzw. die "Tricks" unter Perl noch nicht; für mich seid Ihr die Gurus - deswegen habe ich mich ja hier im Forum angemeldet, damit mir einer sagt/zeigt, wie man das besser machen kann.
Es gibt ja bekanntlich mehrere Wege nach Rom.


Gruss
Ens

<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-07-23 17:09.