Ein Wort in einer Zeichenkette ersetzten
x-VieW
- perl
0 Reiner0 Alexander Foken0 x-VieW0 Alexander Foken0 x-VieW0 Alexander Foken0 x-VieW0 x-VieW
Hallo Leute,
Ich versuche seit Vormittag ein Wort innerhalb eines Strings in
einer Text-Datei zu ersetzen. Die Koordinaten, wo das Wort ersetzt
werden muss, sind mir bekannt.
Ich habe bis jetzt mit der Funktion "substr();" versucht. Mir wurde
nicht das String ersetzt sonder ein neues String hinzugefügt.
kann mir jemand da einen Tipp geben???
Danke & Gruss
x-VieW
Hi,
Ich versuche seit Vormittag ein Wort innerhalb eines Strings in
einer Text-Datei zu ersetzen. Die Koordinaten, wo das Wort ersetzt
werden muss, sind mir bekannt.Ich habe bis jetzt mit der Funktion "substr();" versucht. Mir wurde
nicht das String ersetzt sonder ein neues String hinzugefügt.kann mir jemand da einen Tipp geben???
mit Reg.Expr. :
$meine_variable = "hallo peter";
$meine_variable =~ s/peter/susi/ig;
print $meine_variable."\n";
Gruß
Reiner
Hi Reiner,
Danke für die schnelle Antwort. Aber ich komme nicht ganz klar mit deinem Tipp.
mit Reg.Expr. :
Was bedeutet^^^^^^
ich will in der Text-Datei die Worten ändern. Ist es damit möglich??
Gruss
x-VieW
Hi,
Danke für die schnelle Antwort. Aber ich komme nicht ganz klar mit deinem Tipp.
mit Reg.Expr. :
Was bedeutet^^^^^^
"Regular Expressions"
ich will in der Text-Datei die Worten ändern. Ist es damit möglich??
Klar: Daten einlesen, Wort(e) ersetzen, Daten zurückschreiben.
Für sowas hat Gott doch gerade Perl erschaffen!!! :-))
Moin Moin !
$abc='Hund Furz Maus';
substr($abc,5,4)='Katze';
print $abc;
Wo ist das Problem ?
Alexander
Hi Alexander,
Ich ahbe es auch so gemacht. Aber wenn ich in der Datei speichern will, dann überschreibt mir das alte Werte nicht.
Gruss
x-VieW
Moin Moin !
Dann liegt Dein Fehler in dem Code, der die Datei schreibt, und nicht in der Stringmanipulation.
Laß Code sehen, sonst kann man Dir nicht helfen.
Alexander
Hallo Alexander,
Das vermute ich auch langsam.
Also ein Ausschnitt aus dem Code sieht so aus:
----------------------------
my $file = 'pass.txt';
open(FHD, $file) or die "Can't open : $file!\n";
my @lines=<FHD>;
close (FHD);
foreach my $array(@lines)
{
chomp($array);
($uid, $passw)=split(/,/,$array);
if ($user_name eq $uid)
{
my $password_length = length($password); # Länge: neues Passwort
my $passw_length = length($passw); # Länge: altes Passwort
my $separator = ','; # Trennzeichen
my $user_id = $uid.$separator.$passw;
my $user_id_length = length($user_id); # Länge: Gesamt String
my $string_length = $user_id_length - $passw_length; # Start Koordinate
substr($user_id, $string_length, $password_length) = $password; # Altes Passwort ersetzten mit neuem
# In der Text-Datei einfügen
open(FHD, ">>pass.txt") or die "Can't open : $!\n";
print FHD "$user_id";
print FHD "\n";
close(FHD);
}
}
----------------------------
Ich möchte gerne dem User die Möglichkeit geben sein Passwort
ändern zu können. Der Benutzer name soll erhlten bleiben.
Danke & Gruss
x-VieW
Moin Moin !
Etwas umständlich, oder?
my $file = 'pass.txt';
open(FHD, $file) or die "Can't open : $file!\n";
my @lines=<FHD>;
close (FHD);foreach my $array(@lines)
{
chomp($array);
($uid, $passw)=split(/,/,$array);
if ($user_name eq $uid)
{
my $password_length = length($password); # Länge: neues Passwort
^-- weg!
my $passw_length = length($passw); # Länge: altes Passwort
^-- weg!
my $separator = ','; # Trennzeichen
^-- weg!
my $user_id = $uid.$separator.$passw;
^-- weg!
my $user_id_length = length($user_id); # Länge: Gesamt String
^-- weg!
my $string_length = $user_id_length - $passw_length; # Start Koordinate
^-- weg!
substr($user_id, $string_length, $password_length) = $password; # Altes Passwort ersetzten mit neuem
^-- weg!
$line=$uid.','.$password;
# In der Text-Datei einfügen
Du fügst nicht ein, du hängst an!
Ändere innerhalb von @lines, und schreibe dann, nachdem alles erledigt ist, @lines zurück in die Datei.
open(FHD, ">>pass.txt") or die "Can't open : $!\n";
Warum hast Du den Namen hier fest einprogrammiert?
print FHD "$user_id";
print FHD "\n";
close(FHD);
}
}
So in der Art würde ich das schreiben:
open(FHD,"<$file") or die "Can't open $file: $!\n";
my @lines=<FHD>;
close (FHD);
@lines=grep { substr($_,1+length($user_name)) ne $username.',' } @lines; # user ist aus der Liste rauswerfen
push @lines,"$username,$password\n"; # und mit neuem Password anhängen
open(FHD,">$file") or die "Can't open $file: $!\n";
print FHD @lines;
close (FHD);
Es fehlt noch File locking, das überlasse ich Dir zur Übung. ;-)
Alexander
Hi Alexander
Danke für deine Bemühungen, aber ich habe mehrere Benutzer und
Passwörte in der Liste.
Wenn ich so schreiben, dann löscht mir die anderen Benutzer :(
open(FHD,">$file") or die "Can't open $file: $!\n";
print FHD @lines;
close (FHD);
Gruss
x-VieW
Moin Moin !
Danke für deine Bemühungen, aber ich habe mehrere Benutzer und
Passwörte in der Liste.
Wenn ich so schreiben, dann löscht mir die anderen Benutzer :(
Nein, das passiert nicht. Die anderen benutzer stehen noch in der Liste, die eingelesen wurde. Grep schmeißt nur den vorübergehend raus, der sein Password ändern will. Anschließend wird er mit neuem Password wieder angehängt. Die Liste ist vollständig und wird dann vollständig zurückgeschrieben.
Lies den Code.
Alexander
Hi Alexander,
Ich komme nicht klar mit den Variable:
$username
@lines=grep { substr($_,1+length($user_name)) ne $username.',' } @lines; # user ist aus der Liste rauswerfen
push @lines,"$username,$password\n"; # und mit neuem Password anhängen
Sorry
Gruss
x-VieW
Moin Moin !
Hi Alexander,
Ich komme nicht klar mit den Variable:$username
Ein simpler Tippfehler, _ fehlt.
Du hast nicht wirklich viel Erfahrung, oder?
Alexander
Hi Alexander,
Du hast nicht wirklich viel Erfahrung, oder?
Da hast du recht :)
Ich habe so Probiert wie du mir den Code geschrieben hast. Das alste
Passwort wird nicht gelöscht :(
so sieht die Datei vor dem Ändern
**********************************
Benutzername, Passwort
----------------------
demo,test
fritz,mango
**********************************
so sieht die Datei nach dem Ändern von fritz
**********************************
Benutzername, Passwort
----------------------
demo,test
fritz,mango
fritz,tomate
**********************************
Danke für deine Bemühungen
Gruss
x-VieW
Moin Moin !
Hi Alexander,
Du hast nicht wirklich viel Erfahrung, oder?
Da hast du recht :)Ich habe so Probiert wie du mir den Code geschrieben hast. Das alste
Passwort wird nicht gelöscht :(
Kunststück. Statt substr($_,1+length($user_name)) muß es substr($_,0,1+length($user_name)) heißen. Mit etwas Nachdenken und vor allem Nachlesen in der Perl-Doku hättest Du das auch rausfinden können.
Alexander
Hi Alexander,
Vielen Dank :)
Du hast mir risig geholfen. Es tut mir leid, dass ich dich
damit gestresst habe. :)
Gruss
x-VieW