Forums Neueste Beiträge
 

Grosse Files fuer Perl unsichtbar?

01/09/2007 - 14:04 von Dennis Scheck | Report spam
Hallo,

ich bearbeite eine große Menge Geodaten (Landkarten) mit perl und kann
daher nicht alles in einem Array oder Hash halten. Darum wird vieles in
temporàre Dateien geschrieben, die dann wiederum z.B. mit system"sort
..." sortiert und dann abgearbeitet werden. Das funktioniert auch
bestens bei kleinen Dateien.

Ab einer bestimmten Größe (also mehr Eingangsdaten, dadurch größere
Tempfiles), werden die Dateien für den Perl-Prozess (und seine system
Aufrufe) "unsichtbar".

Ein "open(...) or die $!" sagt "no such file or directory".
ein system("cp -v $file1 $file2") ebenfalls, wie auch system("cat $file1

$file2"). Ein system("wc -l $file1") liefert gar nichts usw...



In der Bash (ausserhalb des perl Prozesses) ist die Datei natürlich da.
Kann gelesen, kopiert usw. werden.

Einen falschen Dateinamen oder so benutze ich nicht. Der selbe Code
funktioniert mit weniger Daten. Erst ab einer gewissen Menge (so ca.
1.500.000 Straßen-Kanten) tritt das Problem auf, davor nicht.

Die Datei hat aber "nur" 150 MB. Es dürfte also noch lange keine
Probleme mit dem Filesystem geben. Getestet wurde es auch schon unter
xfs und ext3. Threads oder fork gibt es nicht im Programm.

Auch bei meinem Kollegen am anderen Ende der Republik làuft es
problemlos, sogar mit den großen Daten. Hier allerdings nicht (auf
einigen Rechnern schon getestet).

Den Quellcode kann ich leider nicht mitliefern da der zig Module
umfasst. Die kritische Stelle kann aber auf ein einfaches open oder -e
gekürzt werden, und er findet die Datei nicht, obwohl sie zur selben
Zeit mit ls in der Bash existiert.

Ich suche schon seit Wochen nach einer Lösung, und bin mit meinem Latein
am Ende. Hat irgendjemand eine Idee, an was das liegen könnte?!

Ratlos,
Dennis
 

Lesen sie die antworten

#1 mlelstv
01/09/2007 - 15:16 | Warnen spam
Dennis Scheck writes:

Ein "open(...) or die $!" sagt "no such file or directory".
ein system("cp -v $file1 $file2") ebenfalls, wie auch system("cat $file1
$file2"). Ein system("wc -l $file1") liefert gar nichts usw...





Wenn cp oder wc die Datei nicht lesen koennen, dann ist das
kein perl-Problem. Dein Script wird entweder nicht im richtigen
Directory sein, oder der Dateiname ist falsch. Eventuell hast
du auch Probleme mit UTF8-Dateinamen.

Michael van Elst
Internet:
"A potential Snark may lurk in every tree."

Ähnliche fragen