PHP Frage: mehrere Daten in txt-Datei schreiben  (Gelesen 260 mal)

Offline Wetterfrosch1971

    • Wetterstation-Badenweiler
    • Männlich
  • Registriert:
    05.08.2011, 21:00:37
  • Beiträge: 716
  • Ort:
    79410 Badenweiler (Baden-Württemberg / Südbaden / Südschwarzwald / 350mNN)
  • Station:
    wh1080
Hallo,

gibt es unter PHP die Möglichkeit, dass ich 12 Zahlenwerte in eine txt-datei schreibe?

Es sollte so aussehen:

zahlenwert1, zahlenwert2, zahlenwert3,...zahlenwert12

Alle 5 Minuten soll dann ein neuer Zahlenwert an die Stelle des Zahlenwert1 eingelsen werden und die restliche Reihe verschiebt sich um eine Stelle nah rechts, so dass dann der alte Zahlenwert12 herausfällt.

Ist dies irgenwie möglich?

Und kann ich dann irgendwie auf jeden einzelnen Zahlenwert aus dieser Reihe per PHP zugreifen, falls ja, welchen Befehl benötige ich da?
Ich glaube ich muss das irgendwie als Array einlesen, richtig?

Es geht mir darum:
Ich möchte alle 5 Minuten den aktuellen Luftdruckwert abspeichern, dies über 1h, d.h. ich habe dann immer 12 Einzelwerte in dieser Datei, alle 5 Minuten kommt ein neuer Wert hinzu und der älteste Wert in der Datei fällt raus.

Wenn ich richtig gegoogelt habe, müsste das mit fwrite() gehen, doch wie muss ich es anstellen, dass immer der letzte Wert der Zeichenkette dann herausfällt, sobald ein neuer Wert in die Datei hineingeschrieben wird?

UPDATE:
Ich glaube ich habe die Lösung gefunden, ich muss meine txt.-datei in ein Array einlesen und dann kann ich mittels dem Befehl array_pop($arr) den letzten Eintrag in dem Array löschen.

Danke für die Hilfe.
Gruß Frank
« Letzte Änderung: 03.02.2018, 19:29:50 von Wetterfrosch1971 »

Wetterstationen.info Forum

PHP Frage: mehrere Daten in txt-Datei schreiben
« am: 03.02.2018, 18:13:05 »

Offline TheWeather

  • Allgemeiner Moderator
    • Männlich
  • Registriert:
    14.01.2007, 10:30:19
  • Beiträge: 4.933
  • 172 m über NN
  • Ort:
    55126 Mainz
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #1 am: 03.02.2018, 19:53:20
Hallo Frank,

ich habe von PHP keine Ahnung, aber bei einer so geringen Anzahl von Daten würde ich nicht mal ein array() zum Umsortieren bemühen, um die Daten von 1 bis 11 auf höhere Indizees zu setzen und dann Index 0 neu hinzuzufügen.

Ich würde die komplette Zeile neu schreiben (ich nehme an, dass die Werte dazu statisch bei Dir vorhanden sind). Die paar Bytes tragen zur Verarbeitungsgeschwindigkeit fast nichts bei und hochladen musst Du die neue .txt-Datei ja sowieso, wenn ich's richtig verstanden habe ...

Wie man dann den Datensatz unter PHP auswertet, frag' mich nicht. Unter C++ wüsste ich, wie's geht, aber ich kenne die Möglichkeiten von PHP nicht ...

Gruß Hans
2xTFA Nexus, Sinus, Duo, EOS Max, Klima-Logger, Mebus TE923

Die Titanic wurde von Profis gebaut, die Arche Noah von einem Amateur. ...

Offline Wetterfrosch1971

    • Wetterstation-Badenweiler
    • Männlich
  • Registriert:
    05.08.2011, 21:00:37
  • Beiträge: 716
  • Ort:
    79410 Badenweiler (Baden-Württemberg / Südbaden / Südschwarzwald / 350mNN)
  • Station:
    wh1080
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #2 am: 03.02.2018, 20:36:21
Hallo,

nein, die 12 Zahlen liegen nicht statisch vor, alle 5 Minuten ändert sich eben der Wert und deswegen muss ich diesen Wert ja alle 5 Minuten neu in die txt-Datei schreiben (und dabei dann eben den letzten, sprich den ältesten Wert verwerfen).

Ich habe gerade bemerkt, dass meine gefundene Lösung mit fwrite() zum Beschreiben leider nicht funktioniert, denn mittels fwrite() wird der aktuelle Eintrag immer wieder überschrieben, ich möchte jedoch, dass jede neue Zahl einfach zusätzlich in die txt-Datei geschrieben wird, sodass sozusagen eine Zahlenreihe entsteht.

Offline TheWeather

  • Allgemeiner Moderator
    • Männlich
  • Registriert:
    14.01.2007, 10:30:19
  • Beiträge: 4.933
  • 172 m über NN
  • Ort:
    55126 Mainz
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #3 am: 03.02.2018, 22:50:48
OK, Du trennst ja mit Trennzeichen wie "," oder mit ";", wenn ich das richtig verstanden habe.

Dann schneide doch einfach die ersten 11 Werte bis vor dem letzten Trennzeichen aus dem vorherigen String aus und hänge sie an den "neuen Wert" + Trennzeichen an. Schon hast Du einen neuen String mit 12 Werten, mit dem neuen Wert an erster Stelle und den älteren elf Werten dahinter. Das geht bestimmt auch mit PHP ...

... oder Du hängst den alten String an den neuen Wert + Trennzeichen an und schneidest erst dann vor dem letzten Trennzeichen ab.

Man könnte die Datei auch binär öffnen, alles ab dem 1. Wert um die Länge des ersten Wertes nach hinten schieben (dann fällt der 12. Wert raus) und die Position des ersten Wertes durch den neuen ersetzen. Das setzt aber voraus, das jeder Wert die gleiche Zeichenlänge repräsentiert, was bei .txt-Dateien nicht unbedingt gegeben sein muss, wenn man nicht zuvor höllisch auf die immer passende Formatierung achtet ...

Das bekommst Du schon hin ...

Gruß Hans
2xTFA Nexus, Sinus, Duo, EOS Max, Klima-Logger, Mebus TE923

Die Titanic wurde von Profis gebaut, die Arche Noah von einem Amateur. ...

Offline Wetterfrosch1971

    • Wetterstation-Badenweiler
    • Männlich
  • Registriert:
    05.08.2011, 21:00:37
  • Beiträge: 716
  • Ort:
    79410 Badenweiler (Baden-Württemberg / Südbaden / Südschwarzwald / 350mNN)
  • Station:
    wh1080
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #4 am: 04.02.2018, 02:20:30
Hallo Hans,

danke für die Erläuterungen.
Habs mit PHP hin bekommen.
Muss jetzt noch etwas an den Feinheiten basteln...leider rennt die Zeit gerade etwas davon und eigentlich sollte ich langsam mal ins Bett, aber wie das halt so ist, wenn man an einem Projekt am "Basteln" ist, lässt es einen einfach nicht los (aktuelle Zeit 2:30 Uhr in der Früh) ;-)

Wetterstationen.info Forum

Re: PHP Frage: mehrere Daten in txt-Datei schreiben
« Antwort #4 am: 04.02.2018, 02:20:30 »

Offline Sundog

  • Registriert:
    13.01.2013, 00:10:21
  • Beiträge: 116
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #5 am: 08.02.2018, 22:49:14
<?php

//1000 wege führen nach rom :) und sundog machts sooo (evtl genutzter dezimalpunkt spielt keine funktionsrolle).

$aktuellerwert=rand(1000,1029); //eigener wert simuliert als neuer zufallswert zwischen 1000 und 1029 

$filename './werte.txt';

if (!
file_exists($filename)) {
file_put_contents($filename,"0,0,0,0,0,0,0,0,0,0,0,0"); //erzeugt datei und schreibt eine dummy 12er füllzeile, falls datei nicht existiert
}

$loops=1//im array beginnt der erste wert mit 0, also überspringen und auf 1 setzen

$allewerte=file_get_contents($filename); //liest die zeile als string
$wert explode(",",$allewerte); //erzeugt array aus allewerte string - durch komma getrennte explosion in einzelwerte von $wert[0] bis $wert[11]
$gesamt count($wert);//zählt die werte

$neuezeile[0]=$aktuellerwert//einschmuggeln des neuen aktuellen wertes auf die erste zelle / also 0

while($loops $gesamt){
$neuezeile[$loops]=$wert[$loops-1]; // altwert übernahme mit versatz von je einer zelle nach rechts 
$loops++;
}

$fertig=implode(",",$neuezeile); //array wieder in komma getrennten string wandeln

file_put_contents($filename,$fertig); //schreibt die neue zeile

echo $fertig// debug ausgabe der neu erzeugten zeile

?>

Offline Wetterfrosch1971

    • Wetterstation-Badenweiler
    • Männlich
  • Registriert:
    05.08.2011, 21:00:37
  • Beiträge: 716
  • Ort:
    79410 Badenweiler (Baden-Württemberg / Südbaden / Südschwarzwald / 350mNN)
  • Station:
    wh1080
Re: PHP Frage: mehrere Daten in txt-Datei schreiben
Antwort #6 am: 09.02.2018, 14:09:43
Hallo Sundog,

danke für deine Mühe und dein Vorschlag,
bis dato hatte ich jedoch schon eine Lösung und diese funktioniert einwandfrei, meine Lösung die ich mit Hilfe eines PHP-Forums gefunden habe, sieht so aus:

<?php

$ld 
'ld.txt';

file_put_contents($ld$variableFILE_APPEND); //$variable ist die Zahl, die immer neu hinzugefügt wird

$a explode';'file_get_contents($ld) );

if ( 
count($a) > 12 )
    
array_shift$a );

$a[] = $neue_nummer;

file_put_contents$ldimplode(';'$a) );

?>

« Letzte Änderung: 09.02.2018, 14:15:06 von Wetterfrosch1971 »