Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 19

Thema: Zeilenweise in Datei schreiben?

  1. #1
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52

    Zeilenweise in Datei schreiben?

    Hi,

    jetzt habe ich mir vorgenommen einen kleinen Counter zu schreiben.
    Ich möchte jetzt die einzelnen Counterstände in eine Textdatei schreiben und zwar
    für jeden einzelnen Counter eine neue Zeile.
    Allerdings funktioniert das nicht, denn er schreibt immer alles in eine Zeile.

    PHP-Code:
    for( $i $i $i++ ){
       
    fputs$fp "$counter[$i]strlen$counter[$i] ) );

    Was mache ich falsch?

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Du machst ja auch keinen Zeilenumbruch...

    Code:
    fputs( $fp , "$counter[$i]" , strlen( $counter[$i] ) );
    vs.

    Code:
    fputs( $fp , "$counter[$i]\n" , strlen( $counter[$i] ) );

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Zitat Zitat von michael.sprick
    Du machst ja auch keinen Zeilenumbruch...

    Code:
    fputs( $fp , "$counter[$i]" , strlen( $counter[$i] ) );
    vs.

    Code:
    fputs( $fp , "$counter[$i]\n" , strlen( $counter[$i] ) );
    Das habe ich aber auch schon probiert und es hat nicht geklappt.
    Verstehe ich nicht, wieso klappt das denn nicht?

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Zitat Zitat von michael.sprick
    Du machst ja auch keinen Zeilenumbruch...

    Code:
    fputs( $fp , "$counter[$i]" , strlen( $counter[$i] ) );
    vs.

    Code:
    fputs( $fp , "$counter[$i]\n" , strlen( $counter[$i] ) );
    Da fehlt die Längenangabe. Dadurch fällt das "\n" hinten herunter.

    Pingu
    Homepage: www.pingu.info

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Welche Längenangabe?
    Damit puts weiss, wei lang der String ist?
    Das mache ich doch mit dem strlen. Oder habe ich Dich jetzt falsch verstanden?

    edit:
    jetzt habe ich verstanden...
    Aber:
    PHP-Code:
    for( $i $i $i++ ){
       
    $counter[$i] = $counter[$i]."\n";
       
    fputs$fp "$counter[$i]strlen$counter[$i] ) );

    So, macht er mir aber immer mehr "\n" da rein, so das ich später viele leere Zeilen habe.
    Wenn ich das so mache:
    PHP-Code:
    fputs$fp "$counter[$i]\n" strlen$counter[$i]."\n" ) ); 
    müsste er ja auch diese leerzeilen machen. Wie kann ich das verhindern?
    Geändert von tybalt0125 (13-08-2005 um 10:45 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Wenn ich die Datei schon fertig vorliegen habe, dann sieht die so aus:
    Code:
    4
    6
    7
    Wenn ich dann die Zeilen einlese, mit fgets und die dann nachher wieder speichere mit
    PHP-Code:
    for( $i $i $i++ ){
       
    fputs$fp "$counter[$i]strlen$counter[$i] ) );

    dann geht das...

    Was mache ich denn falsch?

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Saugst du gleich eine ganze Zeile in den Puffer, oder schlürfst du die Datei via file ein, hast du den/die Zeilenumbruch/brüche hinten dran.

    Schreibst du die Zeile "unbehandelt" wieder zurück, ist alles ok.

    Zum Verarbeiten musst du das Zeilenende abknabbern, dann die Daten ändern, dann wieder das Zeilenende anhängen und wegschreiben.

    so long,
    BlueJay

  8. #8
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Zitat Zitat von BlueJay
    Saugst du gleich eine ganze Zeile in den Puffer, oder schlürfst du die Datei via file ein, hast du den/die Zeilenumbruch/brüche hinten dran.

    Schreibst du die Zeile "unbehandelt" wieder zurück, ist alles ok.

    Zum Verarbeiten musst du das Zeilenende abknabbern, dann die Daten ändern, dann wieder das Zeilenende anhängen und wegschreiben.

    so long,
    BlueJay
    Könntest Du das etwas genauer beschreiben, ich bin noch ein ziemlicher Neuling in PHP.

    So, jetzt mal der ganze code...
    Dies ist der Code, mit dem ich die Daten auslese:
    PHP-Code:
    if(!file_exists($counterfile) ){
       
    $counter[0] = $counter[1] = $counter[2] = 0;
    } else {
       
    $fp fopen($counterfile,"r");
       
    $i 0;
       while(
    $data fgets($fp,1000) ){
          
    $counter[$i] = $data;
          
    $i++;
       }
       
    fclose($fp);

    Und mit diesem Code schreibe ich die Daten wieder in die Datei.
    PHP-Code:
    for( $i $i $i++ ){
       
    fputs$fp "$counter[$i]strlen$counter[$i] ) );


  9. #9
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von tybalt0125
    $fp = fopen($counterfile,"r");
    $i = 0;
    while($data = fgets($fp,1000) ){
    $counter[$i] = $data;
    $i++;
    }
    fclose($fp);
    Wenn die Zahlendarstellungen nicht zu üppig sind, gibt es die Werte mit Zeilenumbruch.

    Der geht beim Bearbeiten wahrscheinlich verloren, da eine automatische Typenumwandlung passiert.

    Also:
    ungeänderte Daten:
    fputs($fp,$counter[$i],strlen($counter[$i]));

    geänderte Daten:
    $zeile=$counter[$i]."\n";
    fputs($fp,$zeile,strlen($zeile));

    Alternative beim Einlesen: (von mir bevorzugt)
    $counter[$i]=trim($data);
    // knabbert Zeilenumbrüche, Leerzeichen und sonstigen Mist vorne und hinten ab

    Da hast du geklärte Verhältnisse, bei denen du beim Schreiben immer einen Zeilenumbruch einfügen musst.

    so long,
    BlueJay

  10. #10
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Du meinst also ich sollte meine Daten ganz normal einlesen und die dann mit dem Befehl trim() trimmen?
    Um danach dann immer mit einem \n die Daten in die Datei zurückschreiben?

    Naja, ich werde das morgen mal ausprobieren.

    Vielleicht hat ja noch jemand eine andere Lösung...

  11. #11
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Das funktioniert, allerdings finde ich das nicht gerade gelungen, geht das nicht irgendwie anders?
    Sonst hat keiner eine Idee?

  12. #12
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    hast du des mit den leerzeilen schon gelöst?
    wenn nein hier beispielcode:
    Code:
    $zeile[] = "bla";
    $zeile[] = "";
    $zeile[] = "bla";
    
    for($i=0;$i<3;$i++)
    {
      if($zeile[$i])
      {
        printf($zeile[$i]."\n");
      }
    }
    somit werden nur die zeilen geschrieben, die auch etwas enthalten.

    warum verwendest du kein fprintf/fscanf?

    greetz

  13. #13
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Ich verwende das nicht, weil ich nicht wusste, das es das auch für php gibt...
    Jetzt bin ich wieder etwas schlauer...
    Danke

  14. #14
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Zitat Zitat von quinte17
    hast du des mit den leerzeilen schon gelöst?
    wenn nein hier beispielcode:
    Code:
    $zeile[] = "bla";
    $zeile[] = "";
    $zeile[] = "bla";
    
    for($i=0;$i<3;$i++)
    {
      if($zeile[$i])
      {
        printf($zeile[$i]."\n");
      }
    }
    somit werden nur die zeilen geschrieben, die auch etwas enthalten.

    warum verwendest du kein fprintf/fscanf?

    greetz

    neenee - das Problem liegt ja ganz woanders.

    Wenn er einfach eine Variable ($var=5) in die Datei schreibt, dann muss er ein \n mit anhängen da sonst die nächste Zahl in der gleichen Zeile landet.

    Wenn er aber erst aus einer Datei eine Zeile ausliest, dann steht am Ende dieser Zeile bereits ein \n. Durch das zurückschreiben der Zahl und das anhängen eines weiteren \n ensteht die Leerzeile... es gibt also in dem Sinne keine leeren Array Elemente, sondern nur doppelte Zeilenumbrüche.

    Er muss nach dem einlesen der Zählerstände erst alle \n entfernen - das geht z.B. mit trim.

    Also: Grundsätzlich alle Zählerstände trim()-en und beim Zurückschreiben IMMER den Zählerstand + \n schreiben.

  15. #15
    Registrierter Benutzer
    Registriert seit
    15.07.2005
    Beiträge
    52
    Ja, so habe ich es jetzt auch gemacht. Funktioniert auch ganz gut... Danke für Deine Hilfe.
    Ich hatte bloß gehofft, das es noch eine elegantere Lösung gibt.

    Danke

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •