letzte Zeile aus Textdatei auslesen

Begonnen von stefan-dd, 16 Oktober 2021, 21:31:43

Vorheriges Thema - Nächstes Thema

stefan-dd

Ich möchte Statusdaten aus einer Datei einlesen. Allerdings will ich nur die letzte Zeile lesen.

test { my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"});; return join(" / ", @content)},

Wie kann man den Programmcode ändern, damit nur die letzte Zeile eingelesen wird?

TomLee

#1
FileRead liest den Inhalt der Datei zeilenweise in das Array @content, meinem Verständnis nach.

Auf das letzte Element eines Array kann man ganz einfach zugreifen:

Kommondozeile:

{ my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"});; return $content[-1];;}

Passt das so ?

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

{ my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"});; return pop $content;;}

Global symbol "$content" requires explicit package name (did you forget to declare "my $content"?) at (eval 35511) line 1.
Experimental pop on scalar is now forbidden at (eval 35511) line 1, at EOF


{ my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"});; return pop @content;;}

2021.10.16 22:58:08 1: ERROR evaluating { my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"}); return pop $content;}: Global symbol "$content" requires explicit package name (did you forget to declare "my $content"?) at (eval 35511) line 1.
Experimental pop on scalar is now forbidden at (eval 35511) line 1, at EOF


?

betateilchen

Zitat von: TomLee am 16 Oktober 2021, 23:00:31
?

ZitatERROR evaluating { my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"}); return pop $content;}:

Es muß pop @content heißen...

Die Fehlermeldung

ZitatExperimental pop on scalar is now forbidden

ist doch eigentlich selbsterklärend?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Ja, sry, das hat man von schnell schnell, Danke.

Kommandozeile:
{ my ($error, @content) = FileRead({FileName => "/opt/fhem/program.log", ForceType => "file"});; return pop @content;;}