perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5597
davon online: 1
weitere User: 1
Click for quality!



17.01.2018 / 14:25

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Mehr String-Funktionen

Eine sehr nützliche Funktion in Perl ist die split-Funktion. Sie unterteilt 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 folgendermassen:

$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 (" "x30) 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

Uebung

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 Uebungsbeispiel für unser File roman5.txt mit dem Suchstring du schreiben. Beachte die folgenden Hinweise:

  • Das ganze File soll in einen Array eingelesen werden (dies ist natürlich im Allgemeinen nicht angebracht, da das File sehr gross sein kann, aber wir wollen uns jetzt nicht darum kümmern.) Jede Zeile des Files ist ein Element des Arrays.
  • Die chop -Funktion mit einem Array als Parameter schneidet den letzten Buchstaben jedes Array-Elementes ab.
  • Wie wir schon gesehen haben, kann der gesamte Array mit folgender Anweisung zusammengefügt werden: $text = "@lines";
  • Verwende die split-Funktion mit dem Suchstring als regulärer Ausdruck für die Trennstelle, an welcher der Text unterteilt werden soll. Das Resultat ist ein Array aller Substrings, welche vom Suchstring eingeschlossen sind.
  • Drucke der Reihe nach jedes Arrayelement, den Suchstring und das nächste Arrayelement aus
  • Beachte, dass das letzte Element des Arrays @food den Index $#food hat.

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



zurück Inhalt weiter






-
-