# Textdatei einlesen

**URL:** <https://community.symcon.de/t/textdatei-einlesen/46461>\
**Category:** Allgemeine Diskussion (2.x/3.x)\
**Created:** [24. Februar 2018 um 14:32 UTC](https://community.symcon.de/t/textdatei-einlesen/46461 "2018-02-24T14:32:05Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [24. Februar 2018 um 14:32 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/1 "2018-02-24T14:32:05Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Axel37](https://community.symcon.de/user_avatar/community.symcon.de/axel37/32/204_2.png) [@Axel37](https://community.symcon.de/u/Axel37)\
**Post date:** [24. Februar 2018 um 14:58 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/2 "2018-02-24T14:58:07Z")

</div>

du kannst dich hieran orientieren:  
[Funkwetterstation PCE-FWS 20 - Seite 2](https://www.symcon.de/forum/threads/10445-Funkwetterstation-PCE-FWS-20/page2?highlight=cumulus)  
da Skript in #16  
ist im Prinzip genauso

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [24. Februar 2018 um 16:18 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/3 "2018-02-24T16:18:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Axel37](https://community.symcon.de/user_avatar/community.symcon.de/axel37/32/204_2.png) [@Axel37](https://community.symcon.de/u/Axel37)\
**Post date:** [24. Februar 2018 um 16:59 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/4 "2018-02-24T16:59:29Z")

</div>

$mon\_ger = xxxx  
ist eine Variable, die wirst du nicht finden 🙂 und … die wirst du so nicht brauchen  
du kannst dich aber aufschlauen, in dem du das [Handbuch](https://www.symcon.de/service/dokumentation/einfuehrung/) durchstöberst.  
weiters findest du hier im Forum zu Hauf (PHP)-Codeschnipsel, die sich nach Anpassung auf dein System verwenden lassen

---

<div class="post-metadata">

**Author:** ![Axel37](https://community.symcon.de/user_avatar/community.symcon.de/axel37/32/204_2.png) [@Axel37](https://community.symcon.de/u/Axel37)\
**Post date:** [24. Februar 2018 um 17:06 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/5 "2018-02-24T17:06:16Z")

</div>

dein filename würde so aussehen:

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

```

---

<div class="post-metadata">

**Author:** ![Axel37](https://community.symcon.de/user_avatar/community.symcon.de/axel37/32/204_2.png) [@Axel37](https://community.symcon.de/u/Axel37)\
**Post date:** [24. Februar 2018 um 17:09 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/6 "2018-02-24T17:09:07Z")

</div>

dann machst du dein file auf:

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

```

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [24. Februar 2018 um 17:45 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/7 "2018-02-24T17:45:10Z")

</div>

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](https://www.symcon.de/forum/threads/25471-PHP-Dateinamen-f%C3%BCr-neueste-Datei-in-einem-Verzeichnis-auslesen?highlight=neueste+datei)

```php
 <?

   $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

---

<div class="post-metadata">

**Author:** ![Axel37](https://community.symcon.de/user_avatar/community.symcon.de/axel37/32/204_2.png) [@Axel37](https://community.symcon.de/u/Axel37)\
**Post date:** [24. Februar 2018 um 17:51 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/8 "2018-02-24T17:51:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ubittner](https://community.symcon.de/user_avatar/community.symcon.de/ubittner/32/29552_2.png) [@ubittner](https://community.symcon.de/u/ubittner)\
**Post date:** [24. Februar 2018 um 17:52 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/9 "2018-02-24T17:52:17Z")

</div>

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

Semikolon fehlt am Ende

Gesendet von iPhone mit Tapatalk

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [24. Februar 2018 um 18:03 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/10 "2018-02-24T18:03:47Z")

</div>

ok,

```php
 <?

   $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“ ??

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [24. Februar 2018 um 19:40 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/11 "2018-02-24T19:40:08Z")

</div>

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

```php
 <?
//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

---

<div class="post-metadata">

**Author:** ![pitti](https://community.symcon.de/user_avatar/community.symcon.de/pitti/32/78081_2.png) [@pitti](https://community.symcon.de/u/pitti)\
**Post date:** [24. Februar 2018 um 19:52 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/12 "2018-02-24T19:52:52Z")

</div>

Da fehlt der Punkt zwischen static Text und Variable!

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [25. Februar 2018 um 08:58 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/13 "2018-02-25T08:58:05Z")

</div>

Moin,

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

```php
 <?
   //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 :

```php
<?
   //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 ?

---

<div class="post-metadata">

**Author:** ![lueralba](https://community.symcon.de/user_avatar/community.symcon.de/lueralba/32/303_2.png) [@lueralba](https://community.symcon.de/u/lueralba)\
**Post date:** [25. Februar 2018 um 14:08 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/14 "2018-02-25T14:08:48Z")

</div>

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

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

```

Gruß  
lueralba

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [25. Februar 2018 um 14:21 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/15 "2018-02-25T14:21:13Z")

</div>

Moin,

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

nun kommt als Antwort auf

```php
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

```php
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

---

<div class="post-metadata">

**Author:** ![lueralba](https://community.symcon.de/user_avatar/community.symcon.de/lueralba/32/303_2.png) [@lueralba](https://community.symcon.de/u/lueralba)\
**Post date:** [25. Februar 2018 um 14:26 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/16 "2018-02-25T14:26:27Z")

</div>

Bist auf dem richtigen Weg…

Aber lies meinen Text genau !

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

```

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [25. Februar 2018 um 14:32 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/17 "2018-02-25T14:32:00Z")

</div>

ich verstehe die Bedeutung der roten + # \* nicht

---

<div class="post-metadata">

**Author:** ![lueralba](https://community.symcon.de/user_avatar/community.symcon.de/lueralba/32/303_2.png) [@lueralba](https://community.symcon.de/u/lueralba)\
**Post date:** [25. Februar 2018 um 14:33 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/18 "2018-02-25T14:33:07Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![lueralba](https://community.symcon.de/user_avatar/community.symcon.de/lueralba/32/303_2.png) [@lueralba](https://community.symcon.de/u/lueralba)\
**Post date:** [25. Februar 2018 um 14:34 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/19 "2018-02-25T14:34:40Z")

</div>

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 …

---

<div class="post-metadata">

**Author:** ![Alikante](https://community.symcon.de/letter_avatar_proxy/v4/letter/a/c2a13f/32.png) [@Alikante](https://community.symcon.de/u/Alikante)\
**Post date:** [25. Februar 2018 um 14:42 UTC](https://community.symcon.de/t/textdatei-einlesen/46461/20 "2018-02-25T14:42:24Z")

</div>

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

```php
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

[Nächste Seite](https://community.symcon.de/t/textdatei-einlesen/46461.md?page=2)
