Zeilen in Textdatei ändern

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

  • Zeilen in Textdatei ändern

    Hallo allerseits,

    ich als php-Anfänger hätte da ein Problem - vielleicht findet sich ja jemand, der mir hilft

    Es geht um folgendes: Ich habe ein Formular, über das ich Daten in eine csv textdatei schreibe. Ausserdem bekommt jede Zeile in der Datei eine eindeutige Nummer zugeordnet, so dass der Inhalt auszugsweise so ausschaut (Raute ist das Trennzeichen):

    1#{wert1}#{wert2}#{wert3}#{wert4}
    2#{wert1}#{wert2}#{wert3}#{wert4}
    3#{wert1}#{wert2}#{wert3}#{wert4}
    ...

    so weit, so gut.
    Ich möchte nun gerne die Möglichkeit haben, Einträge aus dieser csv Datei nachträglich zu editieren. Hierfür lese ich das Ganze mit fgetcsv aus und übergebe die Inhalte der entsprechenden Zeile wiederrum in ein Formular, von wo aus man die Daten editieren kann. Nun zu meinem Problem: Wie kann ich es erreichen, dass die entsprechende Zeile in der Textdatei an der gleichen Stelle die neuen Werte erhält?

    Danke schon mal für die Hilfe,

    Patryn

  • #2
    Übergib doch die Zeilennummer im Formular mit <input type=hidden name="rownr" value="die Zeilennummer">

    Dann hast du die Zeilennummer, lies die Datei in ein Array ein und ändere das Feld mit der Zeilennummer. - oder so...

    Kommentar


    • #3
      Original geschrieben von MeinerEiner
      [B]Übergib doch die Zeilennummer im Formular mit <input type=hidden name="rownr" value="die Zeilennummer">
      mach ich schon

      Dann hast du die Zeilennummer, lies die Datei in ein Array ein und ändere das Feld mit der Zeilennummer. - oder so...
      Genau das ist der Punkt: wie geht das?

      Patryn

      Kommentar


      • #4
        PHP-Code:
        $new_row "...." // Bau hier die neue Zeile zusammen

        $file file("textfile"); //das File mit den Daten

        $fp fopen ("textfile","w"); //das File mit den Daten

        foreach ($file as $i){
              
        $i_exploded explode("#",$i);
              if (
        $rownr == $i_exploded[0])  $i $new_row;
              
        fwrite ($fp$i."\n");
        }

        fclose($fp); 
        $rownr kommt aus dem Formular mit der Zeilennummer

        Kommentar


        • #5
          Wenn ich den code richtig verstehe, dann wird das textfile bei jeder Änderung vollkommen neu geschrieben (sprich: auch die Textzeilen, die gar nicht geändert wurden, werden nochmal neu reingeschrieben).

          Ist das die einzig mögliche Methode Änderungen zu verwirklichen, wenn man mit Textfiles statt einer Datenbank arbeitet?

          Kommentar


          • #6
            geht auch, is aber nen bissle komplizierter.
            mußt du mit fseek den dateizeiger an die richtige stelle setzten und kannst
            da dann mit fwrite was überschreiben...
            eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

            Kommentar


            • #7
              Ist das die einzig mögliche Methode Änderungen zu verwirklichen, wenn man mit Textfiles statt einer Datenbank arbeitet?
              Wo ist das Problem dabei?

              Kommentar


              • #8
                Original geschrieben von MeinerEiner
                Wo ist das Problem dabei?
                Ich halte es für problematisch, dass bei einem (theoretisch) riesigen Textfile jedesmal der ganze, nicht betroffene Kram, nochmal reingeschrieben werden muss. Ist das nicht sehr langsam?

                Kommentar


                • #9
                  Original geschrieben von slarti
                  geht auch, is aber nen bissle komplizierter.
                  mußt du mit fseek den dateizeiger an die richtige stelle setzten und kannst
                  da dann mit fwrite was überschreiben...
                  Und wieso ist das komplizierter? Wenn man fseek sagt, wo sich die Zeile befindet (und die ist ja durch die Zahl eindeutig), müßte das doch ne relativ einfache Sache sein. Bin allerdings nur Laie und kann es natürlich nicht richtig beurteilen.

                  Kommentar


                  • #10
                    int fseek ( int fp, int offset [, int whence])

                    Sets the file position indicator for the file referenced by fp.The new position, measured in bytes from the beginning of the file, is obtained by adding offset to the position specified by whence, whose values are defined as follows:
                    http://www.php.net/manual/en/function.fseek.php

                    Da steht was von Bytes...

                    Ich halte es für problematisch, dass bei einem (theoretisch) riesigen Textfile jedesmal der ganze, nicht betroffene Kram, nochmal reingeschrieben werden muss. Ist das nicht sehr langsam?
                    Warum keine Datenbank? - Und wird dein Textfile auch praktisch riesig? Sonst ist mir das nämlich zu akademisch.
                    Zuletzt geändert von MeinerEiner; 23.08.2002, 19:53.

                    Kommentar

                    Lädt...
                    X