Alexander Foken: Ein Wort in einer Zeichenkette ersetzten

Beitrag lesen

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

--
Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"