Nur etwas kleines :-) splitten

bkames

Grünschnabel
Beiträge
4
Hallo,

ist sicherlich einfach aber:

$name="Harald Heinz Fritz Müller"

Jetzt würde ich gerne nach Nachname und Vorname splitten. Wobei der Vorname 1 oder X sein kann.

Raus soll

Vorname: Harald Heinz Fritz
Nachname: Müller

also nur in 2 Variablen

Sorry .. aber im Moment :headup:
 

bytepool

Code Monkey
Beiträge
791
Hi,

Sprache?

Bash:
Code:
$ name="Fritz Frank Mueller"
$ echo ${name% *}
Fritz Frank
$ echo ${name##* }
Mueller

Python:
Code:
>>> name="Fritz Frank Mueller"
>>> list = name.split(" ")
>>> list
['Fritz', 'Frank', 'Mueller']
>>> list[-1]
'Mueller'
>>> list[:-1]
['Fritz', 'Frank']

Aber wahrscheinlich meinst du Perl, das weiss ich so auswendig auch nicht. ;)

mfg,
bytepool
 

rikola

Foren Gott
Beiträge
2.133
Falls Du tatsaechlich Perl meinst, kannst Du doch 'split' benutzen, dass Dir ein Feld mit (in Deinem Beispiel) vier Eintraegen liefert, von denen Du dann die ersten (4-1) in der einen und den letzten in der anderen Variable speichern kannst.
 

bytepool

Code Monkey
Beiträge
791
Jo, dachte auch dass Perl split kennt, und siehe da, es funktioniert fast genauso.

mfg,
bytepool
 

bkames

Grünschnabel
Beiträge
4
Upps

Ist ja ein gemischtes Forum.
Ja ich wollte es in Perl schreiben.

Mit split und reverse split konnte ich kein Ergebnis erzielen.
Selbst wenn ich mit Limits arbeite.

Wenn der vor und Nachname immer 1-4 groß wäre, könnte ich ja .... Aber wie gesagt das ist unbestimmt.
Was fix ist, ist erst der Vorname und dann der Nachname,
Also trennen nach dem ersten Leerzeichen von hinten. Doppelte Nachname oder von's ignoriere ich mal

Merci
 

bkames

Grünschnabel
Beiträge
4
Danke .. :-)

Nochmal eine Nacht drüber geschlaffen. Ich mach es nun so
Code:
#!/usr/bin/perl

$name="dada Fritz Hans Peter Wurst";
@neu = split (/ /,$name);
@neu2=splice(@neu,-1);

$Vorname= join(" ",@neu);
$Nachname=join(" ",@neu2);

print "$Vorname und $Nachname\n";
 

floyd62

Routinier
Beiträge
324
nur noch als Ergänzung: das geht in Perl mit einer kleinen regex auch ganz ohne split/join/...:
Code:
$name =~ /^(.*)\s+(.*)$/ and ($vorname, $nachname) = ($1, $2);
print "Vorname: $vorname\nName: $nachname\n";

Gruss
 

bkames

Grünschnabel
Beiträge
4
Ja. Genau das hab ich gesucht. Ist doch ein wenig schlanker als die split und join Sache.
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

X11 Monitor Position

HandbrakeCLI Shell Skript

Freie Software auf dem Smartphone

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Oben