Meßdaten aus einer textdatei auslesen und in neue Datei schreiben.

Sir John

Registriert
Thread Starter
Dabei seit
05.07.2012
Beiträge
3
Reaktionspunkte
0
Guten Tag,

Ich habe hier ein lausiges Problem. Ein Steuerung ( Lüftung) wirft Messdaten nicht struktriert aus, sondern in einer Textdatei.

Die Daten sind so nicht wirklich zu verwerten. Und sie sollen jetzt so abgefragt werden, das sie in einer Tabelle gespeichert werden könne.
Oder so in einer Textdatei das si in einem beliebigen Tabellenprogramm imporrtiert werden kann.
Text getrennt durch Kommata, Absäteze ,etc oder als CSV Datei, wie auch immer.

Ich habe ein paar kleiner Scripte für andere Anwendungen schon zusammengestokelt, aber im Grunde bin ich blutiger Anfänger. Ich habe schon ein wenig gesucht und ein verwandt Beispiele gefunden. was mir vor allen Dingen fehlt ist die Lösung für die Abfrage der einzelnen Zeilen und wie ich das in eine neue Datei bekomme, ....ok., ich weiß nicht weiter, weil mir einfach ein paar Grundlagen fehlen.


Hier ein Beispiel der Datei , die minütlich geschrieben wird.
Dieser Absatz wiederholt sich jede Minute bis zum Abruf des Logfiles.
Nach ca 3 Monaten ist die Datei etwa 300Mb groß

===============================================================================

Heiztechnik XYZ GmbH Beispielstraße 10, 12345 Ort Tel.123/1234567

TSL 150/300 G /DC Systemzeit : 8:20 BO: 0/0
===============================================================================

SETUP-EINSTELLUNG - P.-Vers.: TSL_070228_fuer TSL_150_300.bas : 0+0/1/0 <<287>> 0/48/156<->0
Programmvorgaben : 0/0/1/0/1200
-------------------------------------------------------------------------------
Verh. FO/ZU :
manuelle Vorgabe : 0% (-50..50)(Poti: 117)
berechn. Regelabweichung : 0% verbl. Einregeldauer : 61 Minuten
Vent(klein): 22 ..(groß): 78
Filt-Konst :4
Sollwert Luftfeuchte: 50 % Zul.Luftverunreinigung: 55

Betriebswerte
-------------------------------------------------------------------------------
T(AU) = 30°C T(ZU) = 32°C T(AB) = 31°C T(FO) = 30°C
LF(AB)= 42% LQ = 0% WRG = 99%

Betriebsart = AUS/Lüften L-Stufe = 5 (8) / ZU-Vent : 136 f: 0 Hz (136) FO_Vent : 0 f: 0 Hz
mom.Abweichung ZU - FO : 0 % /0
Filter (AU) u.(AB) = 72% AT-Zt:0 Poti:53 (210/30)

-------------------------------------------------------------------------------
Fehler (Filter/Sens/Vent/T-ZU): 0 ((0)000)
 
Wie soll das Resultat denn aussehen?
 
Hallo, Danke das du dir Zeit nimmst.

Wie Beschreib ich das Problem?
Der ganze rumms mit Heiztechnik Und Adresse ist im Grunde überflüssig.
wichtg ist die Systemzeit, die in jedem ABschnittn um eine Minute hochzälht.
Danach kommen die Werte nach dem Doppelpunkt.

Ziel ist es irgendwann eine Tabeklle zu generieren in der die Bezeichnungen vor dem Doppelpunkt bzw. Gleichhheitszeichen als Spaltenüberschrift stehen und die Werte jeweils in einer Zeile eingetragen werden.

Als Beispiel:
der ganze Teil ist im Grunde obsolet und wird nur einmal gebraucht, bis auf die Systemzeit. das geht auch mit Copy &Paste
Heiztechnik XYZ GmbH Beispielstraße 10, 12345 Ort Tel.123/1234567

TSL 150/300 G /DC Systemzeit : 8:20 BO: 0/0
================================================== =============================

SETUP-EINSTELLUNG - P.-Vers.: TSL_070228_fuer TSL_150_300.bas : 0+0/1/0 <<287>> 0/48/156<->0
Programmvorgaben : 0/0/1/0/1200
-------------------------------------------------------------------------------
Verh. FO/ZU :
manuelle Vorgabe : 0% (-50..50)(Poti: 117)
berechn. Regelabweichung : 0% verbl. Einregeldauer : 61 Minuten
Vent(klein): 22 ..(groß): 78
Filt-Konst :4
Sollwert Luftfeuchte: 50 % Zul.Luftverunreinigung: 55

Als erstes wird die Systemzeit gebraucht, die bei jedem Eintrag 1 nach oben zählt:
Systemzeit : 8:20 BO: 0/0

Danach die Betriebswerte. Vor dem = als Spaltenüberschrift nach dem = als eintrag in der jeweiligen Spalte
Betriebswerte
-------------------------------------------------------------------------------
T(AU) = 30°C T(ZU) = 32°C T(AB) = 31°C T(FO) = 30°C
LF(AB)= 42% LQ = 0% WRG = 99%

Betriebsart = AUS/Lüften L-Stufe = 5 (8) / ZU-Vent : 136 f: 0 Hz (136) FO_Vent : 0 f: 0 Hz
mom.Abweichung ZU - FO : 0 % /0
Filter (AU) u.(AB) = 72% AT-Zt:0 Poti:53 (210/30)

Schwierig ist hier die Verwendung von Gleicheitszeichen und Dopppelpunkten/sonderzeichen
z.B. diese Zeile:
Betriebsart = AUS/Lüften L-Stufe = 5 (8) / ZU-Vent : 136 f: 0 Hz (136) FO_Vent : 0 f: 0 Hz

Enthält diese Werte:
Betriebsart = Aus/Lüften
L-Stufe = 5 (8)
Zu-Vent : 136 f: 0Hz (136)
FO_Vent : 0 f: 0 Hz


Die Tabelle aus einer entsprechend strukturierten Datei zu generieren ist nicht das Thema, aber den text erstmal in diese Form zu bringen.
Ich hoffe das die Informationen ausreichen
 
Ich hab mir das mal angeschaut. Das einfachste ist ein Shellscript. Probier das hier mal aus:

Code:
myFile="/Users/Username/Desktop/Heizung.txt";
savePath="/Users/Username/Desktop/Heizung.csv";

Systemzeit="$(cat $myFile | grep -o Systemzeit.* | sed 's/Systemzeit : \([0-9:]*\).*/\1/g')";
BO="$(cat $myFile | grep -o BO.* | sed 's/.*BO: \([0-9/]*\).*/\1/g')";
T_AU="$(cat $myFile | grep -o T\(AU\).* | sed 's/T(AU) = \([0-9]*°C\).*/\1/g')";
T_ZU="$(cat $myFile | grep -o T\(ZU\).* | sed 's/.*T(ZU) = \([0-9]*°C\).*/\1/g')";
T_AB="$(cat $myFile | grep -o T\(AB\).* | sed 's/.*T(AB) = \([0-9]*°C\).*/\1/g')";
T_FO="$(cat $myFile | grep -o T\(FO\).* | sed 's/.*T(FO) = \([0-9]*°C\).*/\1/g')";
LF_AB="$(cat $myFile | grep -o LF\(AB\).* | sed 's/.*LF(AB)= \([0-9]*%\).*/\1/g')";
LQ="$(cat $myFile | grep -o LQ.* | sed 's/.*LQ = \([0-9]*%\).*/\1/g')";
WRG="$(cat $myFile | grep -o WRG.* | sed 's/.*WRG = \([0-9]*%\).*/\1/g')";
Betriebsart="$(cat $myFile | grep -o Betriebsart.* | sed 's/.*Betriebsart = \([A-ZÄÖÜßa-zäöü0-9/]*\).*/\1/g')";
L_Stufe="$(cat $myFile | grep -o L-Stufe.* | sed 's/.*L-Stufe = \([0-9)( ]*\)\/.*/\1/g')";
ZU_Vent="$(cat $myFile | grep -o ZU-Vent.* | sed 's/.*ZU-Vent : \(.*\)FO_Vent.*/\1/g')";
FO_Vent="$(cat $myFile | grep -o FO_Vent.* | sed 's/.*FO_Vent : \(.*\)/\1/g')";
ZU_FO="$(cat $myFile | grep -o 'ZU - FO'.* | sed 's/.*ZU - FO : \(.*\)/\1/g')";
Filter="$(cat $myFile | grep -o 'Filter (AU) u.(AB)'.* | sed 's/Filter (AU) u.(AB) = \([0-9%]*\).*/\1/g')";
AT_Zt="$(cat $myFile | grep -o AT-Zt.* | sed 's/AT-Zt:\([0-9]*\).*/\1/g')";
Poti="$(cat $myFile | grep -o AT-Zt.* | sed 's/.*Poti:\(.*\)/\1/g')";

echo "Systemzeit;BO;T(AU);T(ZU);T(AB);T(FO);LF(AB);LQ;WRG;Betriebsart;L-Stufe;ZU-Vent;FO_Vent;mom.Abweichung ZU - FO;Filter (AU) u.(AB);AT-Zt;Poti" > $savePath;

for ((i=1;i<=$(echo $Systemzeit | wc -l);i++));
do echo "$(echo "$Systemzeit" | sed -ne "$i"p);$(echo "$BO" | sed -ne "$i"p);$(echo "$T_AU" | sed -ne "$i"p);$(echo "$T_ZU" | sed -ne "$i"p);$(echo "$T_AB" | sed -ne "$i"p);$(echo "$T_FO" | sed -ne "$i"p);$(echo "$LF_AB" | sed -ne "$i"p);$(echo "$LQ" | sed -ne "$i"p);$(echo "$WRG" | sed -ne "$i"p);$(echo "$Betriebsart" | sed -ne "$i"p);$(echo "$L_Stufe" | sed -ne "$i"p);$(echo "$ZU_Vent" | sed -ne "$i"p);$(echo "$FO_Vent" | sed -ne "$i"p);$(echo "$ZU_FO" | sed -ne "$i"p);$(echo "$Filter" | sed -ne "$i"p);$(echo "$AT_Zt" | sed -ne "$i"p);$(echo "$Poti" | sed -ne "$i"p))" >> $savePath;
done;

Die beiden Pfade musst du natürlich noch anpassen. Das einzige Problem ist noch, dass Umlaute nicht richtig angezeigt werden.
 
Ich bin überwältigt. Noch bin ich unterwegs aber ich werde das so bald als möglich testen.

Soweit ich das mit meine bescheidenen Kenntnissen sehen kann, ist es in etwa so, wie ich es mir vorgestellt habe.

vielen Dank für diese Arbeit. Ich habe mit Hinweisen gerechnet und werde so beschenkt
 
Zurück
Oben Unten