Hallo pehajo,
Hatte ich mich zu ungenau ausgedrueckt?
Ich denke nicht wirklich, da ja die Variablenbezeichnung $benutzer nahelegt, worum es geht. ;-)
liste[2] ist wirklich ein fixer Platz und kann auch "Stefan" oder "stef" enthalten.
eine regexp scheidet also aus. Klaus hat es richtig erkannt.
Da unterschätzt Du aber die Möglichkeiten der RegEx mit beliebigem Text umzugehen. Und Dein File ist nichts anderes.
Ein RegEx scheidet also in diesem Fall bestimmt nicht aus. Aber das merkst Du, wenn Du mal eine Zeitlang in "perldoc perlre" gestöbert hast ;-)
Der Wert kann aber nur einmal in der datei vorkommen, da es ein Benutzername ist.
Genau den Fall kann auch eine RegEx wie:
^((?:[^|]*|){2}$nutzer|(?:[^|]*|){2})(\d*?)$
abdecken. Sie matched nur ganze Zeilen, in denen genau zwischen 2. und 3. | $nutzer vorkommt (natürlich darf $nutzer kein | enthalten, weil es auch bei der split()-Version Schwierigkeiten bereitet :-). Die nach dem letzten | gefundene Zahl wird bei der Ersetzung um eins erhöht. Also funktioniert eine RegEx in Verbindung mit Suchen ersetzen wunderbar.
Ausserdem schreibe ich die Daten wieder in die gleiche Datei zurueck (sorry, dass mit
neuer Datei war aus meinen Testlaeufen). Leider unterstuetzt der Server (t-mart) keine
system(), sodass ich keine temp.dat erstellen kann und die dann einfach rueberkopieren
kann. Ich muss also: oeffnen -lesen - schliessen -wiederoeffnen - schreiben-schliessen
Eine Funktion, die eine Liste zurückgibt, kann natürlich auch in einer Liste gespeichert werden, statt sie gleich auszudrucken.
@neu = map {...} @alt;
Wie Du siehst, geht mit Perl fast alles ;-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html