Michael Schröpl: (Perl/Datenstruktur) Hash of Files?

Beitrag lesen

Hallo Leute,

das Problem, das ich vor mir liegen habe, ist vermutlich so knifflig, daß ich nur von einer Handvoll Leser eine Reaktion erwarte.

Es geht mir darum, in Perl eine Datenstruktur zu entwerfen, mit der ich eine größere Menge von Eingabezeilen geschickt auf dynamisch viele Dateien verteilen kann - welche Dateien das sind, steht in gewisser Weise in den Zeilen selbst drin.

Die Zeilen enthalten Felder (Feldnummern und Inhalt) und lassen sich mit split() elegant auftrennen.
Einige der Felder besitzen ein implizites Datum, andere besitzen ein explizites Datum in Form des Inhalts eines bestimmten anderen Feldes.
Meine Aufgabe besteht darin, jeweils die Felder der aktuellen Zeile in die dem Datum zugehörige Datei zu schreiben.
Am Ende sollen also viele Dateien desselben Aufbaus wie die Eingabedatei stehen, aber mit jeweils nur dem für sie relevanten Teil der Informationen. (Die werden dann von einem weiteren Prozeß einzeln weiterverarbeitet.)

Im Prinzip habe ich fast alles verfügbar (die Tabellen, welches Feld von welchem anderen abhängt oder auch nicht, lese ich aus Konfigurationsdateien ein).
Bloß weiß ich nicht recht, wie ich die dynamisch vielen Ausgabedateien parallel ansprechen soll.
Für jedes Feld eines jeden Datensatzes die passende Datei zu öffnen und zu schließen, das wird zu langsam (die Eingabe sind 10 MB, die mittlere Feldlänge vielleicht 20 Bytes, und das ist nur *einer* von vielen Verarbeitungsschritten).
Die Eingabe pro Datum mehrfach zu verarbeiten geht nicht so gut, weil in den Datumsfeldern theoretisch *irgendwas* drin stehen kann.
Ich könnte die Daten in irgendwelchen Arrays zwischenspeichern (ein Array pro Datei, diesen müßte ich über das Datum indirekt adressieren - ich bräuchte dann ein hash of array oder müßte in einem hash die Zeilennummer eines arrays of array ablegen ...) statt sie sofort auszugeben, aber dann habe ich die ganzen Daten im Speicher, und das will ich ungern tun (es können mehr als diese 10 MB werden, weil bestimmte Teile der Informationen in *alle* Dateien müssen), und das Ganze muß auf einem WindowsNT4-PC laufen, von dem ich noch nicht weiß, wie gut ausgebaut er sein wird und was auf ihm noch alles gleichzeitig laufen wird.

Was ich also ungefähr suche, das ist entweder ein hash of filehandle (dann könnte ich alle Ausgabedateien bei Bedarf dynamisch öffnen, parallel offen halten und über das Datum adressieren) oder einen hash of pointer to file oder so was Ähnliches.
Leider weiß ich in Perl nicht arg viel über Pointer und Filehandles - das Offensichtliche habe ich schon mal gemacht, aber für meinen Fall reicht es nicht aus.

Mir würde schon sehr helfen, wenn mir jemand für eines der angedeuteten Modelle sagen würde "das geht, so würde ich es machen uns es schreibt sich etwa soundso".