Hallöchen,
ich will(muss) 6 binäre Dateien auslesen um den Inhalt mit
gnuplot darstellen zu können.
3 der binären Dateien speichern nur 00000001 und 00000000 ab.
Also in jedem byte wäre nur eine 1 oder 0.
Die anderen 3 binären Dateien enthalten 32bit float Zahlen.
All diese Werte müssen in eine Tabelle geschrieben werden, die ich mit
gnuplot darstellen kann.
Ein Problem wäre das die Dateien in gewissen zeitlichen Abständen
beschrieben werden. Und wachsen und wachsen und wachsen.
Die ausgelesenen Werte sollte in den 6 Dateien gelöscht werden,
damit ich die Dateien möglichst klein halten kann.
Ich würde mich freuen, wenn mir da Jemand ein paar gute Tipps, code schnippsel ... geben könnte.
Die binären 32 bit float Zahlen werden von rechts nach links ausgelsen.
00 00 A0 41(in Hex) wäre also 41 A0 00 00 und wäre +20.
Grüße Markus
6 binäre dateien auslesen und als int in tabelle speichern
@feldmann_markus: Schau Dir mal das `array`-Modul an.
Das mit dem wachsen der Dateien habe ich nicht so ganz verstanden!? Auf jeden Fall kann man nicht vom Anfang von Dateien etwas entfernen ohne die Datei neu zu schreiben. Man könnte innerhalb der Datei von weiter hinten nach weiter vorne kopieren, aber wenn einem das zwischendurch abraucht, dann hat man Datensalat.
Das mit dem wachsen der Dateien habe ich nicht so ganz verstanden!? Auf jeden Fall kann man nicht vom Anfang von Dateien etwas entfernen ohne die Datei neu zu schreiben. Man könnte innerhalb der Datei von weiter hinten nach weiter vorne kopieren, aber wenn einem das zwischendurch abraucht, dann hat man Datensalat.
@BlackJack
Hört sich schon mal nett an mit Array.
Und zwar müsste ich meine binären Daten als float Werte in
einer neuen Datei speichern.
Kann man das array direkt konvertieren nach float ?
Mit <array.tofile(f)> werden die Werte wieder als binär
gespeichert, das bringt mir als Gnuplot-Tabellen Leser nichts.
Mein code sieht zur Zeit so aus:
Grüße Markus
Hört sich schon mal nett an mit Array.
Und zwar müsste ich meine binären Daten als float Werte in
einer neuen Datei speichern.
Kann man das array direkt konvertieren nach float ?
Mit <array.tofile(f)> werden die Werte wieder als binär
gespeichert, das bringt mir als Gnuplot-Tabellen Leser nichts.
Mein code sieht zur Zeit so aus:
Code: Alles auswählen
import array
f_daten = file('/home/markus/Documents/peakdaten.dat','w')
try:
f_peaks_1 = file('/home/markus/Documents/peakdetektor1.hex','rb')
print "Datei Objekt erstellt"
array = array.array('c')
print "Array Objekt erstellt"
array.fromfile(f_peaks_1,4)
print "Daten aus Datei an Array angehängt"
array.tofile(f_daten)
print "Array in Datei gespeichert"
except:
print "Kann Datei nicht öffnen"
f_peaks_1.close()
f_daten.close()
@feldmann_markus: Ich hätte jetzt eigentlich gedacht, dass Du die Daten als Text speichern wolltest, also eben '20.0' für das Beispiel im ersten Beitrag!?
Was ist denn in 'peakdetektor1.hex'? Wenn es die 1-Byte-Werte sind, dann wäre 'b' der geeignetere Typcode und wenn es die binären 32-Bit-Floats sind, dann natürlich 'f'.
Was ist denn in 'peakdetektor1.hex'? Wenn es die 1-Byte-Werte sind, dann wäre 'b' der geeignetere Typcode und wenn es die binären 32-Bit-Floats sind, dann natürlich 'f'.
Ja mache ich auch noch. Ich hatte aber heute Feierabend gehabt und dann ddenBlackJack hat geschrieben:@feldmann_markus: Ich hätte jetzt eigentlich gedacht, dass Du die Daten als Text speichern wolltest, also eben '20.0' für das Beispiel im ersten Beitrag!?
Hammer fallen gelassen.
Vielen Dank, ich habe auch schon was geändert:BlackJack hat geschrieben:Was ist denn in 'peakdetektor1.hex'? Wenn es die 1-Byte-Werte sind, dann wäre 'b' der geeignetere Typcode und wenn es die binären 32-Bit-Floats sind, dann natürlich 'f'.
Code: Alles auswählen
import array
f_daten = file('/home/markus/Documents/peakdaten.dat','w')
try:
f_peaks_1 = file('/home/markus/Documents/peakdetektor1.hex','rb')
f_peakvalue_1 = file('/home/markus/Documents/peakband1.hex','rb')
print "Datei Objekt erstellt"
array_peaks_1 = array.array('b')
array_peakvalue_1 = array.array('f')
print "Array Objekt erstellt"
array_peaks_1.fromfile(f_peaks_1,4)
array_peakvalue_1.fromfile(f_peakvalue_1,1)
print "Daten aus Datei an Array angehängt"
f_daten.write(str(array_peaks_1[0])+" "+str(array_peakvalue_1[0])+'\n')
print "Array in Datei gespeichert"
except:
print "Kann Datei nicht öffnen"
f_peaks_1.close()
f_daten.close()
00000000 oder 00000001
und in der 'peakband1.hex' habe ich 32bit float Zahlen, wobei
die 32bit paarweise betrachtet werden müssen, da es sich um
real und imaginär 32bit float Zahlen handelt.
Ich bräuchte noch eine Schleife und das ganze am besten möglichst
performance optimiert. Außerdem wollte ich in die erste Spalte meiner
Gnuplot Tabelle einen Zeit Stempel eintragen.
Ich hatte Heute mal ein 'Hallo' an die Datei 'peakdetektor1.hex' angehängt und
es hat funktioniert. Das Programm das die 6 Dateien erstellt macht
nur alle 10 bis 20 sek ein sync. Schön wäre wenn ich die Dateien
periodisch verkleinern könnte.
Oder es werden alle Werte eingelesen und die 6 Dateien gelöscht und
wieder leer erstellt.
Und als Krönung wäre mir eine dynamische Anbindung ab Gnuplot lieb.
Also das Gnuplot immer die neuesten 100 Datensätze darstellt.
Grüße Markus