Patti: ARRAY in TXT schreiben?! Hilfe :-(

Hallo Leute,
ich habe einVerständnis Problem mit einem ARRAY in PHP.
Ich lese eine TXT in ein ARRAY und addiere zu jedem Wert(praktisch in jeder Zeile der TXT steht eine Zahl) etwas dazu.
Nun möchte ich nach der Addition das ARRAY $lines wieder in die TXT schreiben. Leider funktioniert das bei mir nicht. Ich hatte es mit fwrite versucht. Im Netz habe ich nichts hilfreiches gefunden.
Danke für Eure Hilfe :-)
Bye Patti

<?php
$lines = file ('Messdaten.txt');
$lines[0]=$lines[0]+1;
$lines[1]=$lines[1]+2;
$lines[2]=$lines[2]+3;
$lines[3]=$lines[3]+4;
$lines[4]=$lines[4]+5;
$lines[5]=$lines[5]+6;
$lines[6]=$lines[6]+7;
$lines[7]=$lines[7]+8;

?>

  1. ich vermute, mit file() findet eine *Umwandlung* in ein Array statt, ähnlich einem explode().

    Das kannst du zeilenweise wieder ausgeben.

    Oder auch aus dem Array einen String mit Zeilenumbrüchen machen:

    implode("\n", $array);

    1. Hallo Kalle,

      ich vermute, mit file() findet eine *Umwandlung* in ein Array statt, ähnlich einem explode().

      ein Blick ins Handbuch ist meist sehr aufschlußreich: file()

      Bevor Du viel Geld für Kurse ausgibst, solltest Du Dir die Zeit nehmen,
      den Umgang mit der zugehörigen Dokumentation zu erlernen, besonders wie Du
      effizient suchst.

      Ich habe nichts gegen Kurse im Allgemeinen, ganz im Gegenteil. Schließlich
      gebe ich selbst Kurse ;-) Nur ist der Umgang mit dem Handbuch in allen
      Bereichen der EDV eine Grundvoraussetzung für effektives Arbeiten. Ich kann
      ganz gut beurteilen, welchen Vorteil Handbücher in Form von Hypertext bieten,
      schließlich musste ich zu der Zeit, da ich C lernte, noch in einem Schrank
      voller Schuber das jeweils richtige heraussuchen. Die Dokumentation von DEC
      war allerdings exzellent.

      Freundliche Grüße

      Vinzenz

  2. Hallo,

    Nun möchte ich nach der Addition das ARRAY $lines wieder in die TXT schreiben. Leider funktioniert das bei mir nicht. Ich hatte es mit fwrite versucht.

    Welche Parameter hast du fwrite() übergeben? Der 1. Parameter ist ein file-Handle, den du mit fopen() erzeugst. Der 2. ist der Text, den du in die Datei speichern willst. Wenn alle fwrite()-Vorgänge abgeschlossen wurden, solltest du die Datei wieder schließen.

    mfg. Daniel

  3. Habe jetzt etliche Varianten benutzt und wollte jetzt das Array Zeilenweise in die TXT schreiben...aber es wird nichts reingeschrieben. Ich tue mich schwer...
    Danke für Eure Hilfe und Antworten.

    $datei = fopen("Messdaten.txt","w");
    for ($idx=0;$idx<count($lines);$idx++)
    fputs($datei,$lines[$idx] . "n");
    fclose($datei);

  4. Hello,

    ich habe einVerständnis Problem mit einem ARRAY in PHP.

    Das sehe ich ;-)

    Ich lese eine TXT in ein ARRAY und addiere zu jedem Wert(praktisch in jeder Zeile der TXT steht eine Zahl) etwas dazu.

    Genau! Du liest eine Textdatei ein.
    Wodurch ist eine normale Textdatei gekennzeichet?
    1. Dass sie sequentiell gelesen werden muss
    2. Dass die einzelnen "Zeilen" durch einen Zeilentrenner vonneinander getrennt sind
    3. Dass sie i.d.R. "Texte" enthält
    4. aber auch Dass die Zeilen unterschiedliche Inhalte unterschiedlicher Länge haben können.

    Am besten stellt man sich eine textdatei nicht als ein Blatt papier vor, sondern als einen Bindfaden mit Knoten in verschiedenen Abständen. Die Knoten sind die Zeilenendezeichen...

    Nun möchte ich nach der Addition das ARRAY $lines wieder in die TXT schreiben. Leider funktioniert das bei mir nicht. Ich hatte es mit fwrite versucht. Im Netz habe ich nichts hilfreiches gefunden.

    Die Funktion file() hat die unangenehme Eigenschaft, dass sie die Zeilenendezeichen nicht entfernt, sondern in jedem Element eins stehenlässt. Das letzte bedarf der besonderen Untersuchung!

    <?php
    $lines = file ('Messdaten.txt');
    $lines[0]=$lines[0]+1;
    $lines[1]=$lines[1]+2;
    $lines[2]=$lines[2]+3;
    $lines[3]=$lines[3]+4;
    $lines[4]=$lines[4]+5;
    $lines[5]=$lines[5]+6;
    $lines[6]=$lines[6]+7;
    $lines[7]=$lines[7]+8;
    ?>

    Wenn Du also zu einem Text etwas numerisches hinzuaddieren willst, dann musst Du diesen erstmal in einen Numerus umwandeln. Das geht entweder durch die automatische Typumwandlung von PHP; dazu müsste aber das Zeilenendezeichen hinter dem Wert erst vernichtet werden, oder aber durch eine Umwandlungsfunktion. IntVal() ist eine solche.

    http://www.php.net/manual/en/function.intval.php

    <?php

    define('CRLF', chr(10));

    $_lines = file ('Messdaten.txt');
      $_lines[0]=intval($_lines[0])+1;
      $_lines[1]=intval($_lines[1])+2;
      $_lines[2]=intval($_lines[2])+3;
      $_lines[3]=intval($_lines[3])+4;
      $_lines[4]=intval($_lines[4])+5;
      $_lines[5]=intval($_lines[5])+6;
      $_lines[6]=intval($_lines[6])+7;
      $_lines[7]=intval($_lines[7])+8;

    $file_contents = implode(CRLF, $_lines);

    file_put_contents('Messdaten.txt',$file_contents);
    ?>

    Ich stelle mir vor, dass es so funktionieren könnte.
    Schau Dir die Funktionen im Handbuch an.

    Das mit dem Unterstrich bei $_lines ist nur eine Macke von mir. Ich kennzeichne so die Variablen, die ein Array vermuten lassen, ähnlich $_POST & Co.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  5. Hallo Patti,

    <?php
    $lines = file ('Messdaten.txt');

    bitte beachte, dass bei der Anwendung von file() der Zeilenumbruch erhalten bleibt.

    $lines[0]=$lines[0]+1;

    Möchtest Du eine 2 an die Zeile, aber vor das Zeilenende anhängen?
    Oder möchtest Du zu dem Wert der in der Zeile steht, die Zahl 1 dazuaddieren?

    Ich nehme der Einfachheit halber an, dass Du eine 1 an das Ende der Zeile anhängen möchtest. Ich gehe weiter davon aus, dass weder am Ende noch am Anfang der Zeile Leerzeichen sind. Und drittens nehme ich an, dass es sich
    um Textdateien handelt, die auf einem Windows-System erstellt wurden.

    Dann wäre die Behandlung wie folgt:

      
    // Entferne den Zeilenumbruch  
    // Beachte, dass Leerzeichen am Anfang und Ende der Zeile auch entfernt werden.  
    $lines[0] = [link:http://www.php.net/manual/de/function.trim.php@title=trim]($lines[0]);  
    // Hänge die Zahl an, Verkettungsoperator ist der .  
    $lines[0] .= 1;  
    // Hänge die Zeichen, die das [link:http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm@title=Zeilenende in Windows-Textdateien] angeben  
    // wieder an  
    $lines[0] .= chr(13) . chr(10);  
      
    // Dies kannst Du dann zusammenfassen:  
    // Statt der drei Anweisungen oben in einer einzigen  
    $lines[0] = trim($lines[0]) . 1 . chr(13) . chr(10);  
      
    ...  
    // Nachdem alle Zeilen überarbeitet sind.  
    // Schreibe das Array in die Datei "Messdaten.txt" weg:  
    // Unter PHP5 nutze einfach die Funktion [link:http://www.php.net/manual/de/function.file-put-contents.php@title=file_put_contents()]  
    // file_put_contents schreibt Arrays von Zeilen, die Zeilenenden enthalten  
    // genauso weg, wie Du es benötigst.  
    $ergebnis = file_put_contents('Messdaten.txt', $lines);  
    
    

    Natürlich können ein paar meiner Annahmen nicht stimmen, dann bitte ich Dich,
    die Voraussetzungen hier genauer anzugeben.

    Freundliche Grüße

    Vinzenz

  6. Erst mal herzlichen Dank für Eure ausfürliche Hilfe! Hat mir sehr geholfen. Haupfehler war bei mir noch die Schreibrechte bei der TXT Datei :-( aber die Variante von Tom ist 1.Sahne :-).
    Ich meld mich bald wieder, muss mich noch mit dem Handbuch beschäftigen und lernen :-).

    Schönes Wochenende noch.

    Bye Patti

    1. Hello Patti,

      Erst mal herzlichen Dank für Eure ausfürliche Hilfe! Hat mir sehr geholfen. Haupfehler war bei mir noch die Schreibrechte bei der TXT Datei :-( aber die Variante von Tom ist 1.Sahne :-).
      Ich meld mich bald wieder, muss mich noch mit dem Handbuch beschäftigen und lernen :-).

      danke für die Blumen, aber sie ist bitte nur als Übungsbeispiel anzusehen. Für den prduktiven Betrieb muss man bei Dateien im Netzwerk eigentlich immer die möglichen gleichzeitigen Zugriffe beachten. Sonst können die Daten ganz leicht verlorengehen.

      Aber darum ging es hier im ersten Anlauf ja nicht...

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau