KarloK.: Endzahl aus string entfernen

Hi,

ich komm grad nicht weiter. Brett vorm Kopf.

Aus einem String "t12est234" möchte ich "t12est" machen, allerdings ohne zu wissen, ob ich dabei "234" oder z.B. "223344" abschneiden muß.

$text = preg_replace("/d$/", "", $text);

Klappt nicht. Wer weiß, wieso?

Grüße, KarlK.

  1. Hi,

    $text = preg_replace("/d$/", "", $text);

    Klappt nicht. Wer weiß, wieso?

    weil am Ende kein "d" steht. Wenn Du "\d" meinst, solltest Du dies schreiben - und Dir dessen bewusst sein, dass auch dies nur *eine* Ziffer ist.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. weil am Ende kein "d" steht. Wenn Du "\d" meinst, solltest Du dies schreiben - und Dir dessen bewusst sein, dass auch dies nur *eine* Ziffer ist.

      Ich sach ja, Brett vorm Kopp.
      Danke für beide Hinweise, ab jetzt schaff ichs wieder ;-)

      KarloK.

      1. $text = preg_replace("/\d*$/", "", $text);

        Gibts eine Möglichkeit, mir das "Ausgeschnittene" als Variableninhalt zurückliefern zu lassen?

        Grüße, KK

        1. $text = preg_replace("/\d*$/", "", $text);

          Gibts eine Möglichkeit, mir das "Ausgeschnittene" als Variableninhalt zurückliefern zu lassen?

          Grüße, KK

          preg_match

          1. Eigentlich will ich nämlich, dass die dateien

            bild3.jpg
            bild4.jpg
            bild5.jpg

            ins Backup-Verzeichnis kopiert werden.

            Sollten diese Dateinamen dort aber schon vorhanden sein, soll ab dem "höchsten Dateinamen" weiter hochgezählt werden.

            Beispiel: Im Backup-Verzeichnis gibt es schon

            bild3.jpg
            bild5.jpg
            testbild2.jpg
            test4.jpg
            photo22.jpg

            Dann soll
            ./bild3.jpg zu ./backup/bild6.jpg werden
            ./bild4.jpg zu ./backup/bild7.jpg werden
            ./bild5.jpg zu ./backup/bild8.jpg werden

            Mein bisheriger Code:

              
            preg_match("/\d*$/", $datei_ohne_endung, $treffer;  
            $i=$treffer[0];  
            $datei_ohne_endung = preg_replace("/\d*$/", "", $datei_ohne_endung);  
            while (file_exists("./backup/$datei_ohne_endung$i".".$endung")) {  
            $i++;							  
            }  
            // in das Backup verschieben  
            $tofile="./backup/$datei_ohne_endung$i".".$endung";  
            rename($verzeichnis.$datei, $verzeichnis.$tofile);  
            
            

            Wie kann ich das verbessern? Bisher würde aus bild3.jpg nämlich falscherweise bild4.jpg im Backup.
            Ansonsten funktioniert es schon. Es scheitert bisher daran, dass ich nicht die höchste Bild_index_zahl für den entsprechenden Dateinamen herausbekomme.

            Grüße, KK

            1. Hallo,

              Beispiel: Im Backup-Verzeichnis gibt es schon

              bild3.jpg
              bild5.jpg
              testbild2.jpg
              test4.jpg
              photo22.jpg

              Ansonsten funktioniert es schon. Es scheitert bisher daran, dass ich nicht die höchste Bild_index_zahl für den entsprechenden Dateinamen herausbekomme.

              Verschaffe Dir eine Liste der Dateien, die mit Deinem Suchmuster übereinstimmen.

              Wenn die Liste nicht leer ist
                  Sortiere angemessen.
                  Nimm das größte Element aus dieser Liste.
                  Schneide das bekannte Präfix ab (in Deinem Beispiel "bild").
                  Schneide das bekannte Suffix ab (in Deinem Beispiel ".jpg".
                  bisher höchster Wert := Umwandlung des Restes in eine Integer
                  (für Robustheit Fehlerprüfung einbauen)
              Sonst
                  bisher höchster Wert := 0
              Ende Wenn

              Addiere 1 zu dieser Zahl.

              Freundliche Grüße

              Vinzenz

              1. Hi Vinzenz,

                Verschaffe Dir eine Liste der Dateien, die mit Deinem Suchmuster übereinstimmen.

                Hab ich.

                Wenn die Liste nicht leer ist

                Oh. Vergessen. Mach ich noch. ;-)

                Sortiere angemessen.

                Gemacht.

                Nimm das größte Element aus dieser Liste.
                    Schneide das bekannte Präfix ab (in Deinem Beispiel "bild").
                    Schneide das bekannte Suffix ab (in Deinem Beispiel ".jpg".

                Beides nicht bekannt. Aber egal. Mach ich mit preg_match.

                bisher höchster Wert := Umwandlung des Restes in eine Integer

                Brauch ich ja nicht mehr..

                (für Robustheit Fehlerprüfung einbauen)

                Echt nötig?

                Klappt sehr gut bisher.

                Danke für die Hilfe.

                KK

                1. Hi Vinzenz,

                  könntest Du vielleicht nochmal einen Blick darauf werfen?
                  Nicht, dass irgendwo ein Fehler drinne ist und ich mir versehentlich Dateien lösche.

                  Grüße, Kk

                  (Hoffentlich klappt die Formatierung)

                    
                  function dir_rekursiv($verzeichnis)  
                  {  
                       $handle =  opendir($verzeichnis);  
                    
                       while ($datei = readdir($handle))  
                       {  
                            if ($datei != "." && $datei != ".." && $datei != "backup")  
                            {  
                                 if (is_dir($verzeichnis.$datei)) // Wenn Verzeichniseintrag ein Verzeichnis ist  
                                 {  
                                      // Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen  
                                      dir_rekursiv($verzeichnis.$datei.'/');  
                                 }  
                                 else  
                                 {  
                                      $teile = explode(".", $datei);  
                                      $datei_ohne_endung=$teile[0];  
                                      $endung=$teile[1];  
                                      $laenge = strlen($datei_ohne_endung)-1; // string-laenge bestimmen, und  
                                      // 1 abziehen, weil bei 0 angefangen  
                                      // wird zu zaehlen..  
                    
                                      if (($endung != "gif") && (is_numeric($datei_ohne_endung[$laenge])))  
                                      {  
                                           $datei_ohne_endung = preg_replace("/\d*$/", "", $datei_ohne_endung);  
                                           $backupliste = glob("./backup/$datei_ohne_endung*.$endung");  
                                           natsort ($backupliste);  
                                           $hoechste_dateinummer = array_pop($backupliste);  
                                           $teile_hoechste_dateinummer = explode(".", $hoechste_dateinummer);  
                                           $datei_ohne_endung_hoechste_dateinummer=$teile_hoechste_dateinummer[1];  
                                           preg_match("/\d*$/", $datei_ohne_endung_hoechste_dateinummer, $treffer);  
                                           //echo("$datei_ohne_endung_hoechste_dateinummer<br>");  
                                           //print_r($treffer);  
                                           $i=$treffer[0];  
                                           $neuer_index=$i+1;  
                                           $tofile="backup/$datei_ohne_endung$neuer_index".".$endung";  
                                           echo ("tf: $tofile<br>");  
                                           rename($verzeichnis.$datei, $tofile);  
                    
                                      }  
                                 }  
                            }  
                       }  
                    
                       closedir($handle);  
                  }  
                    
                  $verz="./";  
                    
                  if (!file_exists("$verz/backup"))  
                  {  
                       mkdir("$verz/backup");  
                  }  
                    
                  dir_rekursiv($verz);  
                  echo ("fertig");  
                    
                  
                  
      2. Hello,

        weil am Ende kein "d" steht. Wenn Du "\d" meinst, solltest Du dies schreiben - und Dir dessen bewusst sein, dass auch dies nur *eine* Ziffer ist.

        Ich sach ja, Brett vorm Kopp.

        Danke für beide Hinweise, ab jetzt schaff ichs wieder ;-)

        *scnr*
        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Klappt nicht. Wer weiß, wieso?

    was passiert denn?