[Perl] Hash mit gleichen Values

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hallo,

ich habe ein Hash, wo einem Key eine Datei zugeordnet ist. Allerdings können mehrere Keys die gleiche Datei haben. Also in etwa so:
PHP:
%hash = (
    key1 => datei1,
    key2 => datei2,
    key3 => datei3,
    key4 => datei1,
    key5 => datei1,
    key6 => datei2
)
Jetzt will ich in einer Subfunktion in jede Datei eine Kopfzeile schreiben. Allerdings soll dies auch nur 1x in jeder Datei drin stehen.
Bei einem
foreach $z (sort keys %hash)
PHP:
{
   open(AUSGABE,">>$hash{$z}");
   print AUSGABE $line ;
   close(AUSGABE)
}
Habe ich in Datei1 das Ganze 3x stehen und in Datei 2 das ganze doppelt.
Gibt es eine Möglichkeit, bei dem foreach doppelte Values zu überspringen?

anddie
 
Fehler selber gefunden.
open(AUSGABE,">$hash{$z}");

Man sollte doch nie zuviele Copy&Paste-Aktionen machen.
Auch wenn ich jetzt einige Dateien mehrfach erstelle. Ist dahingehend ja wurscht.

anddie
 
So, mein Kopfzeilenproblem hab ich ja gelöst.

Allerdings habe ich noch ein Problem beim Schreiben der richtigen Daten.

Im Endeffekt habe ich eine Originaldatei, die wird zeilenweise durchgegangen und wenn der String an einer bestimmten Stelle der Zeile ein Wert steht, der dem Key entspricht, dann wird dies in die entsprechende Zieldatei (Value des Hashs) geschrieben.
Wenn ich jetzt alle Dateien geöffnet habe (mit >>), dann hab ich das Problem, dass die Zeilen nicht so in die Datei geschrieben werden, wie sie in der Originaldatei auftreten, sondern ich habe in Datei 1 erst alle Zeilen von key1, dann von key4 und dann von key5 und in Datei 2 steht auch erst alles von key2 und dann von key6.

Wenn ich die Datei immer erst beim Schreiben öffne und gleich wieder schließe, dauert die Ausführung allerdings ungefähr 5-10 Minuten.

Meine Frage daher, kann man den Value von bestimmten Keys an den Value anderer Keys "koppeln"? Sozusagen so eine Art "Softlink" auf den anderen Value?

anddie
 
Schwer zu sagen, post mal deinen kompletten Code bitte und vielleicht kannst du noch mal kurz erklären was dein Ziel ist.
Bin mir nicht sicher ob ich dich richtig verstanden habe...

Klingt danach, als würden die Zuordnungen des Arrays nicht stimmen.

Was mich aber wundert:
Warum öffnest und schreibst du die Dateien gleich?
Ich würde die Inhalte in temporären Variablen abspeichern und erst zum Schluß alle Werte in die entsprechenden Dateien schreiben, die sich aus dem Array ja ermitteln lassen.
 
Was mich aber wundert:
Warum öffnest und schreibst du die Dateien gleich?
Hmmm, liegt wohl daran, dass ich persönlich keinen Variablen vertraue, die zuviel Inhalt haben.
Aber ich werd das doch mal ausprobieren.
Und wenn ich da nicht weiterkomme, meld ich mich mit etwas mehr Code hier.

anddie