/blog/perl


substr() in Perl
[120297 mal gelesen]
foreach in Perl
[110958 mal gelesen]
Arrays in Perl - Besonderheiten
[102557 mal gelesen]
open() - Dateien öffnen in Perl
[93836 mal gelesen]
chomp() in Perl
[80707 mal gelesen]
split() in Perl - Zeichenketten teilen
[79921 mal gelesen]
grep - Listen durchsuchen in Perl
[77990 mal gelesen]
push in Perl
[72826 mal gelesen]
sleep in Perl - Das aktuelle Script warten lassen
[56801 mal gelesen]
print in Perl
[47307 mal gelesen]


Arrays
Dateien
HTPC
Hashes
Leistungsoptimiert
PHP
Perl
RegEx
Schleifen
Script
Skalare
Sonstiges
System
Webserver
Zur Startseite


Montag, 19.2.2007, 08:50:42 Uhr

split() - Zeichenketten zerlegen in Perl


Der Befehl split() ist eine mächige Funktion, mit der man Skalare in Arrays zerlegen kann.

Syntax:
@array=split(/$trennungszeichen/,$skalar);


$t="Das hier ist ein Testtext";
@array=split(/ /,$t);
foreach (@array){print "$_\n";}


Ausgabe:
Das
Hier
ist
ein
Testtext

Dem Array wurden also alle einzelnen Wörter zugewiesen. Natürlich kann man als Trennzeichen auch jedes andere Zeichen verwenden, ja sogar ganze Wörter sind möglich.

Wozu man das braucht? Klar, könnt ich jetzt sagen, zum Teilen von Skalaren in Arrays... aber nun mal im Ernst: Angenommenerweise, man hat eine Zeichenfolge wie die Folgende:

$t=<<EOF;
Das ist ein
Testtext
EOF


und ich möchte jetzt jede Zeile einzeln haben.

@einzeln=split(/\n/,$t);


Einfach, oder?

Oder nächstes Beispiel:

$t="Das ist ein Testtext. Er wird verwendet, um etwas zu testen.";
@saetze=split(/\./,$t);
print join("\n",@saetze);


Ausgabe:
Das ist ein Testtext
Er wird verwendet, um etwas zu testen

Es werden also alle Sätze einzeln aufgeteilt, oder besser gesagt: Es erfolgt ein Split bei jedem Punkt.

Übrigens:
Die Zeichen, die als Trennungszeichen genommen werden, werden nicht mit in das Ergebnis aufgenommen. Man sieht das gut am letzten Beispiel, da fehlen an den Satzenden die Punkte.

Es gibt da noch ein paar Besonderheiten zu split()

Ein split('',$skalar) zum Beispiel teilt den Skalar in seine einzelnen Buchstaben bzw. Zeichen.


$t="TEST";
@array=split('',$t);
foreach (@array){print "$_\n";}


Die Ausgabe lautet:
T
E
S
T

Und eine weitere Besonderheit ist, daß die Zeichenfolge, die als Trenner definiert wird, sich eigentlich wie ein regulärer Ausdruck verhält.


$t="Hans::Meier:Dortmund";
@array=split(/:+/,$t);
foreach (@array){print "$_\n";}


Ausgegeben wird
Hans
Meier
Dortmund

Wieso sollte klar sein, wenn nicht, dann hier die Erklärung:
Das split(/:+/,$) teile den Skalar nach jedem einzelnen oder mehrfach hintereinander auftauchenden Doppelpunkt, in diesem Fall also dem Trenner des Vornamens, Nachnamens und Ortes.

Und noch etwas fällt mir gerade noch dazu ein:
split verwendet, wenn sonst nichts angegeben wird, die Spezialvariable $_.

@mitarbeiter = ("Benno:Meier", "Hans:Müller", "Peter:Kaufmann");
foreach (@mitarbeiter){
my ($vorname,$name)=split(/:/);
print "$vorname $name\n";
}


Ausgabe
Benno Meier
Hans Müller
Peter Kaufmann

In der foreach-Schleife wird ja das $_ jeweils mit dem aktuellen Array-Wert belegt, das dann gesplittet wird.
Ob man das so verwendet ist Geschmackssache, es gibt auch Leute, die lieber eine separate Variable für einen Schleifendurchlauf verwenden (der Übersicht wegen).





Kommentare zum Beitrag "split() in Perl - Zeichenketten teilen"

Kommentar von Fabrizio Staudinger
Sehr gelungene Übersicht, die das gröbste knapp aber super verständlich erklärt, um vor allem Laien wie mir, den Einstieg zu erleichtern.
Die Seite ist im Allgemeinen sehr hilfreich und hat mir schon oft geholfen.

Vielen Dank an den Autor!



Thema: Perl Skalare Arrays

Der Beitrag "split() in Perl - Zeichenketten teilen" wurde 79922 mal gelesen.

Es wurde 45 x über diesen Beitrag abgestimmt.
Die durchschnittliche Beurteilung liegt bei
1.8 (1 = sehr gut - 6 = grottenschlecht).

Kommentar schreiben  Druckansicht  Seitenanfang 
Beurteilen 






 Zufällige Beiträge im /blog/perl

Firefox 3 - Exe-Files downloaden

Arrayeinträge zählen und sortiert nach Häufigkeit ausgeben

lc() in Perl - Alle Buchstaben in Kleinbuchstaben umwandeln

Gruppenbildung in Perl

Mein HTPC - Weitere Erfahrungen

sleep in Perl - Das aktuelle Script warten lassen

unlink() - Dateien löschen in Perl

Feiertage eines beliebigen Jahres errechnen mit Perl

Subsystem für Unix-basierte Anwendungen in Windows Vista

chop() in Perl - Letztes Zeichen eines Skalars entfernen



0.0196030139923096 sec. to build



...Blogsoftware in pure Perl - Powered by a lot of Coffee...


SSD-Festplatte - Wassn das???
Die Transliteration - Nur ein Zeichen in einem Skalar ersetzen
Select - Case in Perl
Windows 7 XP Mode – Wo finde ich den XP-Modus unter Windows 7?
Mac-Adresse beim Apple Macintosh herausfinden
SGN-Funktion für Perl
truncate - Dateigröße verändern in Perl
Eigene IP herausfinden mit Perl
Epoche live in Datum umwandeln
Firefox 3 - Exe-Files downloaden


Von: Schorschel eastcoast
Kommentar:
Danke. Das hat mir weitergeholfen.
Zum Beitrag


Von: Jessica
Kommentar:
Kann man auch zwei Datein parallel einlesen?

Zum Beitrag


Von: Xtravaganz
Kommentar:
Für

Zum Beitrag


Von: Xtravaganz
Kommentar:
Für

Zum Beitrag


Von: Sammy
Kommentar:
wie lautet denn die syntax wenn ich eine perl datei in einer perl datei öffnen will. also hier steht ja "|datei: " muss ich da noch ein ".pl" anhängen oder nicht?
Zum Beitrag



Gesamtverzeichnis
Februar 2010
Dezember 2009
Oktober 2009
Januar 2009
Dezember 2008
November 2008
September 2008
August 2008
Juli 2008
Juni 2008
Mai 2008
April 2008
Januar 2008
Dezember 2007
November 2007
Oktober 2007
September 2007
August 2007
Juni 2007
Mai 2007
April 2007
März 2007
Februar 2007
Januar 2007
Dezember 2006


Mister Wong

RSS-Feed

Heute ist der
21.9.2017

Es ist
19:12:07 Uhr

Ihre IP:
54.92.158.65

Blog-Einträge: 186

Die letzten 24 Stunden im Überblick


Gelesene Beiträge insgesamt:
3500347


Webseiten vergleichen
Kalender mit Feiertagen - 2028
Links finden und testen
Menschliche Datumsangaben
IP zu Domain herausfinden
Time live in Datum umwandeln
Perl für Windows



Mo Di Mi Do Fr Sa So
123
45678910
11121314151617
18192021222324
252627282930

Impressum