Textdatei einlesen

Hallo Gemeinde,

ich möchte gern den Inhalt einer Textdatei einlesen. Die Datei endet auf .log und wird täglich neu angelegt. Da ich weder mit dem www.reader noch über medien hinzufügen weitergekommen bin habe ich gerade mein IPS auf 3.4 aktualisiert finde aber auch dort keine Möglichkeit.
Könnt Ihr mir bitte beim Einstieg in das Thema helfen ?

Grüße

du kannst dich hieran orientieren:
Funkwetterstation PCE-FWS 20 - Seite 2
da Skript in #16
ist im Prinzip genauso

ok, danke für den Link.

Das muß also alles per php gemacht werden ? Keine vorkonfigurierte Instanz oder so ?

Bei php bin ich noch blutiger Anfänger.

Es würde schon etwas helfen wenn die ich die verwendeten Befehle finden könnte um zu verstehen was sie bedeuten.
mon_ger finde ich schonmal nicht im Internet, denke aber es soll dazu dienen das datum im Name der datei zu erkennen.

Meine Dateien werden wie folgt benannt : TextData_YYYYMMDD.log

Wie muß der Befehl : $mon_ger[date(„M“)].date(„y“).".log" umgebaut werden ?

Grüße

$mon_ger = xxxx
ist eine Variable, die wirst du nicht finden :slight_smile: und … die wirst du so nicht brauchen
du kannst dich aber aufschlauen, in dem du das Handbuch durchstöberst.
weiters findest du hier im Forum zu Hauf (PHP)-Codeschnipsel, die sich nach Anpassung auf dein System verwenden lassen

dein filename würde so aussehen:

 $filename = "C:/deinpfad/"."TextData_20".date("y").date("m").date("d").".log";  
echo $filename; 

dann machst du dein file auf:

    //File öffnen 
   $handle = fopen($filename,"r"); 
  
  //anweisungen zum Lesen an dieser Stelle  
  
// file wieder schliessen
   fclose($handle); 

Da bringt die Kiste nen Fehler :

Parse error: syntax error, unexpected ‚TextData_20‘ (T_STRING) in C:\IP-Symcon\Scripts\20959.ips.php on line 2

Der Name muss sicher erst definiert werden, sind ja einige tausend Dateien im Ordner. Wäre es nicht Sinnvoller die neueste Datei zu suchen ?
PHP Dateinamen für neueste Datei in einem Verzeichnis auslesen

 <?

   $dir = "C:\Programme\RESOL\ServiceCenterFull\workspace\"
   $lastfile = '';

    $handle = opendir( $dir );

   if( !$handle )
       return false;

    while ( ( $file = readdir( $handle ) ) !== false )
        {
        if( $file != '.' && $file != '..' && is_file ( $dir.$file ) )
            {
         if( filemtime( $dir.$file ) >= filemtime( $dir.$lastfile ) )
                {
            $lastfile = $file;
                }
        }

    }

    closedir( $handle );

    echo "
Neueste Datei:" . $lastfile;
?> 

dann gibts aber nen anderen Fehler :Parse error: syntax error, unexpected ‚‘ (T_NS_SEPARATOR) in C:\IP-Symcon\Scripts\20959.ips.php on line 25

$lastfile = ‚‘; ist falsch, da fehlt u.a. der Dateiname

$dir = „C:\Programme\RESOL\ServiceCenterFull\workspace“;

Semikolon fehlt am Ende

Gesendet von iPhone mit Tapatalk

ok,

 <?

   $dir = "C:\Programme\RESOL\ServiceCenterFull\workspace";
   $lastfile = '';

    $handle = opendir( $dir );

   if( !$handle )
       return false;

    while ( ( $file = readdir( $handle ) ) !== false )
        {
        if( $file != '.' && $file != '..' && is_file ( $dir.$file ) )
            {
         if( filemtime( $dir.$file ) >= filemtime( $dir.$lastfile ) )
                {
            $lastfile = $file;
                }
        }

    }

    closedir( $handle );

    echo "Neueste Datei" . $lastfile;
?>

nun bekomme ich „Neueste Datei“ zurück. Das bedeutet in der Variablen $lastfile ist nun der Inhalt meiner Datei „gespiegelt“ ??

Hab nochwas im Netz gefunden und suche nun meine letzte Datei so:

 <?
//get the lastest file uploaded in excel_uploads/
$path = "C:\Programme\RESOL\ServiceCenterFull\workspace";
$latest_ctime = 0;
$latest_filename = '';
$d = dir($path);
while (false !== ($entry = $d->read())) {
$filepath = "{$path}/{$entry}";
//Check whether the entry is a file etc.:
    if(is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
    }//end if is file etc.
}
echo $latest_filename;

 //File öffnen
   $handle = fopen ("C:\Programme\RESOL\ServiceCenterFull\workspace"$latest_filename) ;
   //File nicht gefunden?
   if (!$handle) echo ("File not found");

Der Name der letzten Datei wird zurückgegeben, aber ich mache wieder einen Fehler bei fopen :
Parse error: syntax error, unexpected ‚$latest_filename‘ (T_VARIABLE) in C:\IP-Symcon\Scripts\20959.ips.php on line 18

Da fehlt der Punkt zwischen static Text und Variable!

Moin,

bis zum Punkt Datei öffnen läuft es nun.

 <?
   //get the lastest file/
    $path = "C:\Programme\RESOL\ServiceCenterFull\workspace";
    $latest_ctime = 0;
    $latest_filename = '';
    $d = dir($path);
while (false !== ($entry = $d->read())) {
    $filepath = "{$path}/{$entry}";
   //Check whether the entry is a file etc.:
if(is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
    }//end if is file etc.
}
echo $latest_filename;

  //File öffnen
   $file = "C:\Programme\RESOL\ServiceCenterFull\workspace/".$latest_filename ;
   $handle = fopen ($file,"r");
  //File nicht gefunden?
if (!$handle) echo ("File not found");


?>

Jetzt möchte ich ja gern die Parameter im text in Variable schreiben. Der Text ist so aufgebaut, im Kopf werden die Parameter definiert und dann nur noch Zahlenkolonnen geschrieben.

Datum Temperatur Sensor 1 [ °C] Temperatur Sensor 2 [ °C] Temperatur Sensor 3 [ °C] Temperatur Sensor 4 [ °C] Temperatur Sensor 5 [ °C] Temperatur Sensor 6 [ °C] Temperatur Sensor 7 [ °C] Temperatur Sensor 8 [ °C] Temperatur Sensor 9 [ °C] Temperatur Sensor 10 [ °C] Temperatur Sensor 11 [ °C] Temperatur Sensor 12 [ °C] Einstrahlung [ W/qm] Impulseingang 1 Impulseingang 2 Sensorbruchmaske Sensorkurzschlussmaske Sensorbenutzungsmaske Drehzahl Relais 1 [ %] Drehzahl Relais 2 [ %] Drehzahl Relais 3 [ %] Drehzahl Relais 4 [ %] Drehzahl Relais 5 [ %] Drehzahl Relais 6 [ %] Drehzahl Relais 7 [ %] Drehzahl Relais 8 [ %] Drehzahl Relais 9 [ %] Relaisbenutzungsmaske Fehlermaske Warnungsmaske Reglerversion Systemzeit Vorlauftemperatur [ °C] Fernversteller [ K] Aussentemperatur [ °C] Speichertemperatur [ °C] Vorlaufsolltemperatur [ °C] Relaismaske Vorlaufmaximaltemperatur [ °C] HK-Kennlinie Nachtabsenkung [ K] Tageskorrektur [ K] Mischerlaufzeit [ s] Sommerbetrieb [ °C] Info Schaltuhr Fehlerstatus Modulstatus Relaisstatus Fehler-Info Vorlauftemperatur [ °C] Fernversteller [ °C] Aussentemperatur [ °C] Vorlaufsolltemperatur [ °C] Modulversion
24.02.2018 00:00:06 -2,7 59,0 3,5 58,9 2,4 16,8 888,8 59,3 888,8 41,6 888,8 40,1 0 0 0 1344 0 18447 0 0 100 0 0 0 100 0 100 463 0 0 513 Sa,00:11 40,1 888,8 -6,9 -2693,2 42,2 3 65 1,4 -3 2 1 19 4 0 8 3 0 55,6 0,5 -6,9 56,8 1795

Für mich ist dabei nur die letzte geschriebene Zahlenkolonne interessant, diese Beginnt mit dem Datum und Endet mit 1795. Wie bekomme ich diese Zahlen in Variable geschrieben ?

Update: mit den eingefügten Befehlen von der Funkwetterstation schaut es nun so aus :

<?
   //get the lastest file/
    $path = "C:\Programme\RESOL\ServiceCenterFull\workspace";
    $latest_ctime = 0;
    $latest_filename = '';
    $d = dir($path);
while (false !== ($entry = $d->read())) {
    $filepath = "{$path}/{$entry}";
   //Check whether the entry is a file etc.:
if(is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
    }//end if is file etc.
}
echo $latest_filename;

  //File öffnen
   $file = "C:\Programme\RESOL\ServiceCenterFull\workspace/".$latest_filename ;
   $handle = fopen ($file,"r");
  //File nicht gefunden?
if (!$handle) echo ("File not found");

  //Ghe alle Datensätze durch
while ($line = fgets($handle))
   {
if (strlen($line) > 10)
        {
   //Datenzeile zerlegen
          $parameter = explode(";", $line);
   //Zeile enthält Parameter?
          if (count($parameter) == 17)
            {
            }
        }
    }

   fclose($handle);

echo ($parameter[0]." ".$parameter[1]."
");
?>

die Meldungen dazu :

TextData_20180225.log
Notice: Undefined offset: 1 in C:\IP-Symcon\Scripts\20959.ips.php on line 39
25.02.2018 10:07:08 98,2 63,7 96,6 59,4 94,1 16,6 888,8 60,6 888,8 36,9 888,8 42,0 1026 0 0 1344 0 18447 100 0 0 0 0 0 0 0 100 463 0 0 513 So,10:18 42,0 888,8 -4,1 -2693,2 41,0 1 65 1,4 -3 2 1 19 0 0 16 3 0 57,0 0,5 -4,1 58,4 1795

Wo steckt beim letzten echo der falsche Offset ?

Hallo Alikante.

Du teilst deinen String $line mit explode.
Als Suchstring nimmst du „Semikolon“, der aber (so wie ich das gesehen habe) in deinem Ursprungsstring $line nicht vorkommt.
Also ist das Array nur einen Wert groß $parameter [0] !
Dort steht dann auch alles drin.

Hättest du prüfen können mit

echo ("+++++".$parameter[0]."######### ".$parameter[1]."********* 
"); 

Gruß
lueralba

Moin,

danke für den Hinweis, das hatte ich heut Mittag herausgefunden und das „;“ durch " " ersetzt.

nun kommt als Antwort auf

echo ($parameter[0]." ".$parameter[1]."
"); 

25.02.201814:13:55 86,7 63,8 84,7 58,3 83,2 17,2 888,8 61,0 888,8 55,7 888,8 38,4 399 0 0 1344 0 18447 100 0 100 0 0 0 0 0 100 463 0 0 513 So,14:25 38,4 888,8 2,4 -2693,2 38,1 1 65 1,4 -3 2 1 19 0 0 16 3 0 47,5 0,4 2,4 50,2 1795

steht das das jetzt auch alles in $Parameter[0] ??? Wie kann ich die 54Werte in $Parameter[0] bis $Parameter[53] teilen ??

Aber funktionieren muß es irgendwie denn mit

SetValue(37664  /*[Resol\resol Log einlesen\Temperatur Kollektor]*/,$parameter[0])

nimmt die 37664 /[Resol\resol Log einlesen\Temperatur Kollektor]/ den Wert 25012018,0°C an

Bist auf dem richtigen Weg…

Aber lies meinen Text genau !

echo ("+++++".$parameter[0]."######### ".$parameter[1]."********* 
");

ich verstehe die Bedeutung der roten + # * nicht

Deine Trennzeichen nach dem zweiten Wert scheinen keine Leerzeichen zu sein !

Wenn Du genau hinsiehst siehst du, dass der Erste Wert offensichtlich in $parameter[0] steht und der Rest in $parameter[1].DIe beiden stehen im echo() direkt aneinander.

Auf deine Frage:

Damit siehst du was in den beiden Strings steht !
Ich mache das für mich beim Fehlersuchen so, die „roten Zeichen“ sind die optische Ummantelung …

Verstehe ich nicht, im Text file schaut das so aus

24.02.2018 00:00:06 -2,7

Zwischen Datum und Uhrzeit ist eine Leerstelle deshalb macht müsste explode da zwei Werte draus machen.
Wieso werden die Werte im Echo nun hintereinander dargestellt ??

Edit : explode macht was es soll

echo ($parameter[0]." ");

Antwort

24.02.2018

im Parameter 1 steht nun der ganze Rest - Warum ? Hat Explode evt. ein Problem mit dem Vorzeichen ??

Edit2 :

habs nun quick und dirty gemacht und einfach das vermeintliche Leerzeichen aus der Antwort oben in die Klammern nach explode kopiert - nun gehts