ein Kapitel zurück                                           ein Kapitel weiter

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 zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf