letzten zeilenumbruch aus textdatei entfernen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • letzten zeilenumbruch aus textdatei entfernen

    Hi @all!

    Ich habe folgendes Problem:

    Ich lese einen Ordner mit Bildern aus.
    Danach nummeriere ich die die Bilder neu und schreibe diese Information in ein .txt File

    $picturelist = "$i#$picname#$width$#height#$height\n";

    Dieses .txt File wird einmal angelegt, wenn das Album erstellt, oder verändert wird.

    Auf der Album Seite lese ich jetzt dieses File aus und gebe die Bilder mit den enstsprechenden Informationen aus.

    Funktioniert alles super.

    Aber mein Problem ist, wenn das .txt File geschrieben wird, entsteht am Ende des Files eine leere Zeile(Zeilenumbruch), die natürlich auch ausgelesen wird und dadurch ein "Bild" angezeigt wird (rotes X), das es nicht gibt.

    Gibt es eine Möglichkeit das .txt File so zu schreiben, dass diese leere Zeile nicht entsteht?
    Gibt es eine Möglichkeit diese leere Zeile zu löschen?

    Hab es schon mit array_pop() versucht, aber da löscht er mir die letzte geschriebene Zeile und der Zeilenumbruch ist wieder da :-(
    Hab auch schon versucht die Zeilenumbrüche zu entfernen aber dann funktioniert die "explode"/"trim" Funktion nicht mehr.

    Vielleicht hat einer ja eine Idee.
    Die Informationen in eine Datenbank zu schreiben ist leider nicht möglich.

    Nur den Ordner mit den Bilder ausgeben geht auch nicht, da ich für weitere Seiten die restlichen Informationen für die Bilder aus den .txt File als Varibalen auslesen und übergeben muss. Es scheitert nur an diesen leeren Zeilenumbruch :-(

    Vielen Dank schon im Vorraus
    MfG

  • #2
    wie genau schreibst du den text in die datei? ein bischen code wäre hilfreich
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      explode("\n", trim(file_get_contents(...)))

      Kommentar


      • #4
        .txt File schreiben:

        PHP-Code:
        $open fopen("picturelist.txt""w");
        fclose($open);

        $i=0;
        $filepath="album/"
        $directory=opendir ($filepath); 
        while (
        $file=readdir($directory)) 

            if (
        filetype($filepath.$file)!="dir"
            { 

                
        $i++; 
                
                
                
        //get pic size
                
        $size getimagesize("$filepath$file");
                
        $width $size[0];
                
        $height $size[1];
                
         
        $picturelist "$i#$file#$width#$height\n";
         
        $writein "picturelist.txt";
         
        $handle fopen($writein "a");
         
        fwrite($handle$picturelist);
         
        fclose($handle);

                
            } 

        closedir($directory); 
        .txt file auslesen:

        PHP-Code:
        $openpicturelist fopen ("picturelist.txt""r");

        while (!
        feof($openpicturelist)) 

          
        $buffer fgets($openpicturelist1000000);
          

          
        $picturelist explode("#",$buffer); 

          
        $picturenumber trim($picturelist[0]); 
          
        $picturename trim($picturelist[1]);
          
        $picturewidth trim($picturelist[2]);
          
        $pictureheight trim($picturelist[3]);
          
         echo 
        "<a href='alben/$picturename'><img src='alben/tn/$picturename' alt='$picturenumber' border='0'>";

                } 
        fclose ($openpicturelist); 
        Das ist der Code um den es geht.

        @onemorenerd
        wie gebau kann ich die von dir genannte funktion einbauen?

        Kommentar


        • #5
          lass mich mal kurz raten. error_reporting steht bei dir nicht auf E_ALL?
          beim auslesen solltest du prüfen, ob $buffer oder $picturelist überhaupt daten enthält, bevor du den link ausgibst
          it's not a bug,
          it's a feature!

          Kommentar


          • #6
            Aua aua. Du iterierst in einer While-Schleife über ein Verzeichnis und schreibst die Dateinamen in ein Textfile. Warum öffnest und schließt du die Datei immer wieder? Mach sie einmal auf, schreib alles rein und mach sie dann wieder zu. Das geht viel schneller ... und ist weniger peinlich.
            Also einmal fopen(), in der Schleife immer nur fwrite() und am Ende des Scripts fclose(). Das Problem mit dem Zeilenumbruch bleibt aber bestehen. Deshalb rate ich eher zu dieser Lösung:
            PHP-Code:
            $pics = array();
            $path 'album/'
            $dir opendir($path); 
            while (
            $file readdir($dir)) {
                if (
            is_file($path.$file) && $size getimagesize($path.$file)) {
                    
            $pics[] = $file.'#'$size[0].'#'.$size[1];
                }
            }
            closedir($dir);
            file_put_contents('picturelist.txt'implode("\n"$pics)); 
            Das # als Trennzeichen kann übrigens gefährlich sein. Was passiert, wenn ein Bild mal ein # im Dateinamen trägt?

            Das Lesen kannst du auch vereinfachen, etwa so:
            PHP-Code:
            foreach (file('picturelist.txt') as $i => $line) {
                list(
            $name$width$height) = explode('#'$line); 
                echo 
            '<a href="alben/'.$name.'"><img src="alben/tn/'.$name.' alt="'.$i.'" /></a>';

            Wie du siehst, steht kein Zähler mehr in der Datei. Gezählt wird beim Lesen. Width und Height habe ich mal gelassen, obwohl ich nicht sehe, wo du es brauchst.

            Zum Schluß noch die Sinnfrage: Warum machst du das alles? Warum erzeugst du diese Datei? Brauchst du sie noch für einen anderen Zweck? Wenn nicht, dann spar dir das Gehampel und machs direkt so:
            PHP-Code:
            foreach (glob('album/{*.gif,*.jpg,*.png}'GLOB_BRACE) as $i => $pic) {
                echo 
            '<a href="alben/'.$pic.'"><img src="alben/tn/'.$pic.' alt="'.$i.'" /></a>';

            Ich habe den Code übrigens nicht getestet. Mach das mal selbst.

            Kommentar


            • #7
              Hi!

              Vielen Dank für die schnellen Antworten. Ich weiß das das schreiben in die Datei etwas umständlich erfolgt.

              Naja ich brauche diese Datei, da auf diese Datei und Daten noch andere Scripts und Seiten zugreifen. Ist aber hierfür egal. Ich habe nicht den ganzen Code gepostet sondern nur den relevanten Teil.

              Gibt es wirklich keine einfache Lösung diesen leeren Zeilenumbruch am Ende aus dem .txt File zu löschen/entfernen/ausblenden.

              Wenn ich es händisch mache funktioniert ja alles so wie ich es brauchen würde.

              Kommentar


              • #8
                Original geschrieben von nightwalker
                Naja ich brauche diese Datei, da auf diese Datei und Daten noch andere Scripts und Seiten zugreifen. Ist aber hierfür egal. Ich habe nicht den ganzen Code gepostet sondern nur den relevanten Teil.
                Das bißchen Code bietet schon genug Hinweise um die Aussage zu treffen, dass dein Konzept nicht gut ist. Wie sicherst du ab, dass nicht zwei Prozesse gleichzeitig diese Datei erzeugen? Was machen die anderen Scripte mit Width/Height und dem Zähler? Warum können die anderen Scripte nicht direkt das Verzeichnis auslesen?
                Gibt es wirklich keine einfache Lösung diesen leeren Zeilenumbruch am Ende aus dem .txt File zu löschen/entfernen/ausblenden.
                Prinzipiell gibt es drei Ansätze:
                1. Den störenden Zeilenumbruch gar nicht in die Datei schreiben. Dann muß er auch nicht entfernt werden.
                2. Den störenden Zeilenumbruch erstmal schreiben und anschließend wieder entfernen.
                3. Den störenden Zeilenumbruch schreiben, in der Datei lassen und beim Lesen entfernen. Dafür habe ich weiter oben schon einen Vorschlag gemacht.

                Kommentar

                Lädt...
                X