Jan K.: Ändern von csv dateien

Hallo zusammen,

ich bekomm es nicht hin einen beliebeigen Eintrag innerhalb einer csv Datei zu ändern.

Ich möchte gerne verscheidene Eigenschaften wie name, land etc. aus dazu anglegeten csv dateien auslesen und per <input... value='..'>
ind formulare übergeben.

Wird nun ein wert im formular geändert und per submit button gesendet, soll der neue wert den platz ind der entsprechenden csv datei einnehmen.

Soweit, sogut. Das löschen eines wertes mit unset habe ich schon hinbekommen und das anhängen mit a+ auch.

Aber wie kann ich einen bestimmten Wert mittendrin ändern?

Gruß,

Jan

  1. Hi,

    ich bekomm es nicht hin einen beliebeigen Eintrag innerhalb einer csv Datei zu ändern.

    das liegt vermutlich daran, dass das Filesystem so etwas wie einen "Eintrag" nicht kennt.

    Aber wie kann ich einen bestimmten Wert mittendrin ändern?

    Schreibe die Datei komplett neu.

    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. Hallo nochmal,

      danke für die antworten.

      $nick=$_POST[nick];        //der zu ändernde wert aus dem formular
      $id=$_GET[id];             //die eintragsstelle in der csv datei
      $change0=fopen("nick.txt","r");
      $change = fgetcsv($change0, 400000, §); //csv datei "abspeichern"
      fclose($change0);
      $count=(count($change)-1); //anzahl der einträge

      $change[$id]=$nick;        //ersetzen des entsprechenden elements

      $schreibe=fopen("nick.txt","a+");

      $start=0;                  // ab hier stimmt was nich ;)
      while ( $start == $count ) {

      fwrite($schreibe,$count[$start]."§");

      $start++;
      }

      Eigentlich hatte ich mir das so gedacht, daß ich einfach die csv datei öffne und den ganzen inhalt in einem array abspeichere.
      Dann sollte der betreffende teil durch die neuen infos ersetzt werden und das ganze wieder in der datei geschreiben werden.

      Woran liegts?

      Gruß,

      Jan

      1. hi,

        Woran liegts?

        Woran liegt _was_?

        Dass du keine Fehlerbeschreibung gepostet hast?
        Das liegt vermutlich daran, dass du die Tipps für Fragende noch nicht gelesen hast.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo Jan,

    Ich möchte gerne verscheidene Eigenschaften wie name, land etc. aus dazu anglegeten csv dateien auslesen und per <input... value='..'>
    ind formulare übergeben.

    sieh Dir bitte fgetcsv() (insbesondere das Beispiel) an!

    Wird nun ein wert im formular geändert und per submit button gesendet, soll der neue wert den platz ind der entsprechenden csv datei einnehmen.

    Sieh Dir bitte fputcsv() an.

    Wenn es dennoch Probleme bei Deinem Script geben sollte, ist es hilfreich, wenn Du hier das Script posten würdest.

    Gruß aus Berlin!
    eddi

    --
    Achte die Kleinigkeiten, aber liebe das Detail!
  3. Eine CSV Datei ist nur eine Textdatei in der die einzelnen Einträge durch Trennzeichen und einzelen Zeilen durch Zeilen-Endezeichen voneinander getrennt werden. Die Datei kennt keine Zeilenumbrüche. Für den ist alles nur eine einzige Abfolge von Zahlen. Wenn Du also eine bestimme Zeile ändern willst, mußt Du folgendes tun:

    • CSV-Datei mit PHP öffnen
    • Jede Zeile an Hand des Zeilenabschlußzeichens einzeln in ein Array einlesen.
    • Jede einzelne Zeile an Hand des Trennzeichens trennen und in ein Array schreiben.
    • Wenn Du jeder Zeile eine eindeutige ID vorangesetzt hast (was man machen sollte) dann kannst du an Hand dieser ID die richtige Zeile finden.
    • Nun kannst Du jeden aufgesplitteten Wert (Arrayeintrag) der betreffenden Zeile ändern.
    • Das Ganze wieder zusammenbauen und in die CSV Datei zurückschreiben.

    Die funktion zum aufsplitten heist übrigens
    split("Trennzeichen", "Zeichenkette").

    Anwendung:
    einzelwerte = split("Trennzeichen", "Zeichenkette");

    Jetzt hast Du in einzelwerte[index] die einzelnen Werte der jeweiligen Zeile.

    Sollte gehen. Grüße VON Guma

  4. Noch was...

    überlege Dir ob nicht SQL hier besser wäre. Die Vorteile bei deinem Anwenungsbeispiel liegen auf der Hand. Textbasierte datenbanken nutzen nur bei Protokollen oder kleinen Texten etwas. Wird ständig was geändert sind Textdateien nicht die beste Lösung!

    Good Luck Guma

    1. Stimme dir voll und ganz zu,

      aber ich habe es nicht geschafft myqsql zu installieren.
      Hab das 2 tage probiert und es dann sein gelassen. Irgendwie hat php 5 sql anbindung, zickezacke, was weiß ich erstmal deaktiviert.

      Nach ewigen, erfolglosen suchen in den php config dateien und dem problem das ich keinen apache webserver (sondern kfweb) zu laufen habe, hatte ich keine lust mich weiter damit rumzuärgern.

      Für meinen Anwendungsfall, das dürften um die 500 user mit jeweils ca. 10 detailinformationen sein, hoffe ich mit csv noch gut klarzukommen.

      Gruß,

      Jan

      1. Bleibt folgende Überlegung:

        Stell dir vor eine Möbelspedition würde einen VW-Bus kaufen nur weil der Vertrag mit den 3-Achsigen LKWs nicht geklappt hat. Zwar wäre erst mal ein Fahrzeug da aber die Spedition wird damit wohl kaum erfolgreich sein.

        Kurz: Nur weil die SQL Instellation nicht geklappt hat muss man doch nicht gleich auf ein flatfile-system zurückgreifen, welches viel arbeitsintensiver ist. Übderdenke bitte kein Konzept nochmal und gehe dann ganz neu ran.

        Guma

        1. Hallo,

          Bleibt folgende Überlegung:
          Stell dir vor eine Möbelspedition würde einen VW-Bus kaufen nur weil der Vertrag mit den 3-Achsigen LKWs nicht geklappt hat. Zwar wäre erst mal ein Fahrzeug da aber die Spedition wird damit wohl kaum erfolgreich sein.

          Ein schöner Vergleich. :-)
          Aber da halte ich doch mal dagegen: Warum soll man sich einen Dreiachser anschaffen, wenn doch eigentlich ein kleiner Bollerwagen den Anforderungen genügt?

          Kurz: Nur weil die SQL Instellation nicht geklappt hat muss man doch nicht gleich auf ein flatfile-system zurückgreifen, welches viel arbeitsintensiver ist.

          Das sehe ich bei so kleinen Projekten mit überschaubarer Datenmenge nicht so. Da erscheint mir der Einsatz einer SQL-Datenbank wie die sprichwörtlichen Kanonen für die Spatzen.

          So long,
           Martin

          --
          Einer aktuellen Erhebung zufolge sind zehn von neun Ehefrauen eifersüchtig auf ihren Mann.
      2. echo $begrüßung;

        aber ich habe es nicht geschafft myqsql zu installieren.
        Hab das 2 tage probiert und es dann sein gelassen. Irgendwie hat php 5 sql anbindung, zickezacke, was weiß ich erstmal deaktiviert.

        Vermutlich liegt das an dem (altbekannten) Lizenz-Problem, das PHP5 mit MySQL bekommen hat. Unter den Frequently Asked Questions gibt es ein Kapitel für Database issues, in dem die Frage behandelt wird und Lösungswege aufgezeigt werden.

        Für meinen Anwendungsfall, das dürften um die 500 user mit jeweils ca. 10 detailinformationen sein, hoffe ich mit csv noch gut klarzukommen.

        Es gibt auch noch SQLite, welches in PHP5 für solche kleinen Datenbankprojekte vorgesehen wurde.

        echo "$verabschiedung $name";