GUI mit Perl/Tk

Tutorial

Mehr String-Funktionen

Eine sehr nützliche Funktion in Perl ist die split-Funktion. Sie zerteilt einen String an definierten Stellen und kopiert die Teile in einen Array. Diese Funktion verwendet reguläre Ausdrücke für die Trennstellen und splittet die $_-Variable, falls nichts anderes spezifiziert wird.

Sie funktioniert folgendermaßen:

$info = "Benno:Müller:Kaufmann:Hauptstrasse 14";
@personal = split(/:/, $info);

Dies hat den gleichen Effekt, wie

@personal = ("Benno", "Müller", "Kaufmann", "Hauptstrasse 14");

Falls die Information in der $_-Variablen gespeichert ist, können wir einfach schreiben:

@personal = split(/:/);

Falls die einzelnen Felder durch eine beliebige Anzahl von Doppelpunkten unterteilt sind, können wir einen regulären Ausdruck verwenden. Der Code

$_ = "Hugo:Huber::dipl. math.:::Dammweg 2";
@personal = split(/:+/);

bedeutet das gleiche wie

@personal = ("Hugo", "Huber",
             "dipl. math.", "Dammweg 2");

Hingegegen würde

$_ = "Hugo:Huber::dipl. math.:::Dammweg 2";
@personal = split(/:/);
den folgenden Array ergeben: 
@personal = ("Hugo", "Huber", "",
             "dipl. math.", "", "", "Dammweg 2");

Ein Wort kann in Buchstaben, ein Satz in Wörter und ein Paragraph in Sätze aufgeteilt werden:

@chars = split(//, $word);
@words = split(/ /, $sentence);
@sentences = split(/\./, $paragraph);

Im ersten Fall wird der Null-String zwischen jedem Buchstaben erkannt, deshalb ist der @chars-Array ein Array von Buchstaben, dh. ein Array von Strings der Länge 1.

substr

Eine weitere Funktion die auf Strings operiert ist die substr-Funktion. Hier sind drei Beispiele, wie sie verwendet wird:

substr("Once upon a time", 3, 4);       # returns "e up"
substr("Once upon a time", 7);          # returns "on a time"
substr("Once upon a time", -6, 5);      # returns "a tim"

Das erste Beispiel ergibt einen Substring der Länge 4, welcher an der 3. Stelle beginnt. Beachte, dass der erste Buchstaben eines Strings den Index 0 hat!
Beim zweiten Beispiel wird der letzte Parameter, die Länge des Substrings, weggelassen. Das Resultat ist ein Substring, welcher von der angegebenen Stelle bis zum Ende des Strings reicht.
Das dritte Beispiel benützt einen negativen Index. Es ergibt einen Substring, der an der 6. Stelle vom Ende des Strings an 5 Buchstaben lang ist.

Falls der negative Index vor den Anfang des Stringes zeigt, wird Perl nichts zurückgeben und eine Warnung ausgeben. Um das zu vermeiden, kann man einen String verlängern unter Verwendung des x-Operators, den wir früher erwähnt haben. Zum Beispiel erzeugt der Ausdruck (" " x 30) erzeugt 30 Leerzeichen.

substr kann auch als lvalue verwendet werden (auf der linken Seite einer Anweisung):

$str = "It's a Perl World.";
substr($str, 7, 4) = "Small";    # It's a Small World
substr($str, 13, 0) = "Perl ";   # It's a Small Perl World

Übung

Ein nützliches Werkzeug in der Verarbeitung von natürlichen Sprachen ist die Konkordanz. Sie erlaubt die Darstellung einer bestimmten Zeichenfolge in ihrem unmittelbaren Kontex. Zum Beispiel wird ein Konkordanzprogramm mit dem Suchstring 'the' angewendet auf ein bestimmtes File die folgende Ausgabe erzeugen. Beachte die Darstellung des Suchstringes in einer vertikalen Zeile.

discovered (this is the truth) that when he
t kinds of metal to the leg of a frog, an e
rrent developed and the frog's leg kicked,
 longer attached to the frog, which was dea
normous advances in the field of amphibian
ch it hop back into the pond -- almost.  Bu
ond -- almost.  But the greatest Electrical
ectrical Pioneer of them all was Thomas Edi

Wir wollen ein solches Programm als Übungsbeispiel für unsere Datei roman5.txt mit dem Suchstring du schreiben. Beachte die folgenden Hinweise:

Soweit so gut. Jedoch stehen die Suchstrings noch nicht untereinander in einer Zeile. Um das zu erreichen benötigen wir die substr-Funktion.

Top