Hallo,
ich bin noch nicht lange mit Perl unterwegs und suche nun Lösungsansätze für eine Aufgabenstellung mit der ich noch nie zu tun hatte. Über Hilfe würde ich mich freuen.
Die Situation:
Ich lese Ascii-Dateien ein. Die Zeilen der Datei bilden Datenblöcke ab. Es können beliebig viele Datenblöcke enthalten sein und es können sich Datenblöcke wiederholen. Aber es sind immer komplette Blöcke.
Ein Block ist wie folgt definiert:
1 Zeile <VORSATZ>
1 bis n Zeilen <DATENSATZ>
1 Zeile <NACHSATZ>
VORSATZ und NACHSATZ enthalten Prüfsummeninformationen zu den dazwischen liegenden Detail-Datensätzen. VORSATZ und NACHSATZ kann ich beim Parsen nicht eindeutig identifizieren, da ich den Prüfsummenalgorithmus nicht kenne. Ich kann aber DATENSATZ dazwischen eindeutig identifizieren.
Immer wenn ich einen Block mit gewünschen Datensätzen finde, muss ich den kompletten Block in eine neue Datei schreiben. Das Problem dabei ist, dass ich keine Idee habe, wie ich die dazu passenden VORSATZ und NACHSATZ Zeilen sauber identifiziere und wegspeichere. Das davor- und dahinterschreiben ist dann wieder kein Problem.
Das hier habe ich schon:
if ($a =~ /^0412/) { # zeilenlänge 576?
$a = '<>'.$a; # spitze klammern davor
push(@a100,$a); # zeile ins array schreiben
}
if ($a =~ /^0824/) { # siehe oben, nur mit anderer satzlaenge
$a = '<>'.$a;
push(@a200,$a); # zeile ins array schreiben
}
In den Arrays stehen jetzt alle möglichen Zeilen drin. Wie parse ich die jetzt so dass nur noch die relevanten Blöcke übrig bleiben? Im Array a100 muss ich nach '0412foo' als DATENSATZ suchen; im Array a200 nach '0824bar'. Hat jemand eine Idee?
Ich kann leider keine Module verwenden, da der Unix-Rechner auf dem ich arbeite keine Internetverbindung hat und mir im Programmverzeichnis auch die Schreibrechte fehlen.