![ein Kapitel weiter](../weiter.gif)
pack und unpack sind richtig eingesetzt 2 mächtige Waffen um Daten in ein bestimmtes String-Format zu packen (pack) und wieder entpacken (unpack).
Beginnen wollen wir mit unpack, womit wir Daten die uns im String-Format vorliegen
in einzelnen Teile entpacken. Beispielsweise einfache Loggin-Files
Auswerten die in folgender (Fantasy)-Form vorliegen..............
01.08.2001 20.00Uhr Mark Mustermann 01.08.2001 23.34Uhr
02.08.2001 09.30Uhr Mark Mustermann 02.08.2001 11.23Uhr
usw.
Um dies jetzt in einzelne Strings zu zerlegen könnten man mehrere substr()-Aufrufe
betätigen. Aber wozu diese Mühe wenn es die Funktion unpack() gibt. Wollen wir uns mal ansehen wie wir diese Funktion für unser Beispiel einsetzen können.
#!/usr/bin/perl -w
$line_to_unpack = "01.08.2001 20.00Uhr Mark Mustermann 01.08.2001 23.34Uhr";
@output = qw(Login um User Logout um);
$counter=0;
@entpackt = unpack("a15 a12 a18 a12 a8", $line_to_unpack);
("01.08.2001"," 20.00Uhr","Mark Mustermann"," 01.08.2001"," 23.34Uhr");
foreach (@entpackt){
print $output[$counter++] , "\t: ";
print $_ , "\n";
}
Zur Erklärung zu........
a15 a12 a18 a12 a8
Dies nennt sich Template-String und heißt das wir mit z.B. a15 einen
Template-String anfordern der 15 Zeichen breit ist. Sind sie z.B. nicht an das Logout mit Uhrzeit
interessiert können sie dies x angeben. In unserem Beispiel sieht dies dann so aus..............
@entpackt = unpack("a15 a12 a18 x12 x8", $line_to_unpack);
Somit werden diese beiden letzten Daten ignoriert und auch nicht ausgegeben. Bei dem letzten
Template-String, der Uhrzeit des Ausloggen, können sie auch anstatt......
a8 -> a*
...schreiben. Das bedeutet praktisch ein Feld beliebiger Größe. In unserem Fall da es am
Schluss steht ist es eben der Rest.
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|