x-VieW: Ein Wort in einer Zeichenkette ersetzten

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

  1. 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

    1. 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

      1. 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!!! :-))

  2. Moin Moin !

    $abc='Hund Furz Maus';
    substr($abc,5,4)='Katze';
    print $abc;

    Wo ist das Problem ?

    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!"
    1. 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

      1. 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

        --
        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!"
        1. 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

          1. 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!"
            1. 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

              1. 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

                --
                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!"
            2. 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

              1. Moin Moin !

                Hi Alexander,
                Ich komme nicht klar mit den Variable:

                $username

                Ein simpler Tippfehler, _ fehlt.

                Du hast nicht wirklich viel Erfahrung, oder?

                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!"
                1. 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

                  1. 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

                    --
                    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!"
                    1. Hi Alexander,

                      Vielen Dank :)
                      Du hast mir risig geholfen. Es tut mir leid, dass ich dich
                      damit gestresst habe. :)

                      Gruss
                      x-VieW