Datei parsen bzw. lesbar machen

Gast #3852254
Lesenswert?

Hallo,

ich habe eine Datei mit Messwerten vorliegen, die ich gerne in Excel 
weiterverarbeiten möchte. Leider liegt die Datei in einem Format vor, 
welches nicht von Excel unterstützt wird, da das Messgerät aus dem sie 
stammt schon etwas älter ist.

Im Handbuch zur Software ist das Format der Datei allerdings 
beschrieben.
Die Datei beginnt mit einem "Formular" welches vom Typ ASCII ist und 
eine Länge von 726(?) aufweist.
Dann folgen Einstellungen ebenfalls in ASCII mit einer Länge von 64. 
Dann folgen die Messwerte für X und Y vom Typ Binär, die Länge ist halt 
abhängig von den Messwerten.

Mir fehlt jetzt ein Ansatz diese Datei so zu zerlegen bzw. lesbar zu 
machen, das ich die X/Y Werte auslesen und in Excel weiterverarbeiten 
kann.

Ich wäre für einen Hinweiß sehr dankbar und bedanke mich im Voraus für 
Eure Tips.
Gast #3852368
Lesenswert?

Also ich hab jetzt noch mal in der Dateibeschreibung geschaut, da steht 
das die X bzw Y Werte 2Byte lang sind, also 16Bit, das können dann 
sowohl Integer als auch Float Werte sein nehme ich an...aber das bringt 
mich jetzt wohl nicht weiter, oder?
Ich hatte schon die verschiedenen Importmöglichkeiten ausprobiert, aber 
in Excel kann ich auch nicht einstellen das die ersten 780 Zeichen ASCII 
sein sollen und der Rest was anderes, ich muß die Datei also auf jeden 
Fall zerlegen.
Eine Darstellung in ASCII bietet EXCEL bzw. WORD auch nicht an, hab alle 
Formatierungen ausprobiert, aber der Text am Anfang der Datei ist nicht 
lesbar, immer nur "wirre" Zeichen, kein Muster erkennbar.
Moderator #3852397
Lesenswert?

Eric schrieb:
> da steht
> das die X bzw Y Werte 2Byte lang sind, also 16Bit, das können dann
> sowohl Integer als auch Float Werte sein nehme ich an

2-Byte-Werte sind normalerweise Integer- und keine Float-Werte. Letztere
sind üblicherweise mindestens 4 Bytes lang. Prinzipiell sollte man noch
die Bytereihenfolge (also Little- oder Big-Endian) kennen. Wenn die
Datei aber auf einem PC erstellt wurde, kann man praktisch immer von
Little-Endian ausgehen.
Gast #3852416
Lesenswert?

Das ist natürlich auch eine Möglichkeit :-)
Habe sie mal angehängt.

Aus der Ausgabe im Hexeditor werde ich noch nicht so recht schlau, aber 
seht mal selbst...meine Vorgehensweise wäre es jetzt, die ersten 780 
Zeichen zu entfernen, da spielt es ja keine Rolle was es ist. Danach 
blieben nur noch die Messwerte mit unbekanntem Datentyp übrig.
Die erste Hälfte der Werte sind die X Werte, die 2 Hälfte die Y Werte. 
Jeder Wert ist 2 Byte lang...wäre dies schon mal ein Ansatz?
Angehängte Dateien:
Gast #3852697
Lesenswert?

Du kannst Dir die Daten z.B. mit Hexdump ansehen, etwa

hexdump -C ../Downloads/Kopie.dat |less

Man erkennt schon eine gewisse Struktur.

Ich würde eher vermuten, dass es ein Header ist, und dann fortlaufend 
die "Y-Werte" als 16 Bit. Bei äquidistanten Werten macht es ja Sinn, die 
"X-Werte" nicht abzuspeichern. Ich könnte Raten, dass der Header 792 
Byte hat, dann könnte man

hexdump --skip 792 -v -e '1/2 "%d\n"' ../Downloads/Kopie.dat

probieren um die nachfolgenden Werte jeweils als zwei Byte nach ASCII zu 
konvertieren. Das sollte dann dein Exel einlesen können. Ich hoffe mal 
dein Rechner hat hexdump, sonst musst Du dich nach einem Linux Rechner 
umsehen.

Und "man hexdump" sagt dir mehr über die Möglichkeiten.
Gast #3852745
Lesenswert?

726 Bytes 0x20

64 Bytes, die nach Hex-als-ASCII aussehen:
20020600000A004004048840404040808000000013A837C7790000FF0F1487D2

8188 Bytes, die offenbar die Messwerte repräsentieren (je 2 Bytes).

Eric schrieb:
> meine Vorgehensweise wäre es jetzt, die ersten 780
> Zeichen zu entfernen, da spielt es ja keine Rolle was es ist.

Würde ich so probieren. Wobei in der Beispieldatei die Headerlänge 
anscheinend 790 Bytes beträgt? In solchen Fällen ist ein Hex-Editor 
recht nützlich.
Gast #3852769
Lesenswert?

Wobei nach dem "Konfigurationscode" erstmal von 0 bis 255 hochgezählt 
wird und jede Zahl achtmal vertreten ist. Es wäre gut zu wissen, was bei 
dieser spezifischen Messung so gemessen wurde, falls es auch eine 
Bildschirmanzeige gab.
Gast #3852835
Lesenswert?

Ufff...das sind ja jede Menge Antworten die ich erst mal sortieren muß, 
heute schaffe ich das aber nicht mehr.

Die Messdaten stammen von einem Wirbelstrommessgerät (Bj.93) was als 
Anzeige selbst nur eine Art Oszilloskopbildschirm hat auf dem dann die 
Werte angezeit werden. In sofern ist es schon richtig, das wenn sich die 
Messsonde über die Probe bewegt nur Ausschläge in y Richtung zu sehen 
sind, da die X Richtung ja die Zeit repräsentiert.
In einem Diagramm müßte man sich das so vorstellen, wie Nadelimpulse 
über die Zeit aufgetragen, das ist zumindest das Bild was auf dem 
Bildschirm zu sehen war.

Ich bedanke mich jedenfalls schon mal recht herzlich im Voraus für eure 
tolle Hilfe und werde mal sehen ob ich morgen durch die Antworten 
durchsteige, ansonsten melde ich mich einfach wieder ;-)
Gast #3856869
Lesenswert?

Hallo zusammen,
bin erst jetzt dazu gekommen hier wieder reinzuschauen. Ja, das Ergebnis 
vom Physiker sieht sehr gut aus, vielen Dank :-)

Aber mir ist nicht klar, wie ich jetzt aus den 2Byte langen Int-Werten 
etwas verwertbares machen kann, das ich in Excel weiterverarbeiten kann.
Ich benutze als Hex Editor den XVI32, dort habe ich jetzt (durch 
manuelles abzählen) die ersten 780 Byte entfernt und die Datei 
abgespeichert. Jetzt sollten dort ja nur noch die 2 Byte langen Int 
Werte stehen. Wie kann ich diese Daten jetzt weiterverarbeiten, könntest 
du (physiker) oder jemand anders mir das evt. noch mal erklären.

Ich kann mir die Zahlenwerte, wenn ich 2 Bytes markiere als Int Werte 
anzeigen lassen, aber ob die richtig sind, das weiß ich nicht.

Ich habe die Datei um die ASCII Daten erleichterte Datei mal als Anhang 
angefügt, könntet ihr mal schauen ob das bis dahin richtig ist und sie 
nur noch die 2Byte langen INT Werte enthält?

Irgendwie stehe ich gerade auf dem Schlauch und das obwohl ich schon 3 
Kaffee drin habe :-/
Angehängte Dateien:
Gast #3856921
Lesenswert?

Ich hab jetzt noch ein wenig rumprobiert. Das Programm hexdump scheint 
es für Win in dieser Form nicht geben, schade.
Das wäre aber doch alles was ich benötige, oder?
Die Schritte wären dann wie folgt:

Datei im Hex Editor öffnen
Konfigurationsdaten entfernen (780 oder 792 Byte?)
Datei abspeichern
Datei mit einem "Konverter" dem ich sage das es sich um 2Byte Int Werte 
handelt in Text konvertieren.
Text in Excel einlesen und fertig.

Das müßte doch so funktionieren...fehlt mir nur noch ein Programm was 
unter  Windows die Konvertierung einer ganzen Datei von Bin zu txt 
erlaubt.
#3856932
Lesenswert?

Eric schrieb:
> Aber mir ist nicht klar, wie ich jetzt aus den 2Byte langen Int-Werten
> etwas verwertbares machen kann, das ich in Excel weiterverarbeiten kann.

Du schreibst ein kleines Script das die Originaldatei liest, parst und 
die Werte in eine csv-Datei schreibt. Diese kann man dann mit Excel 
importieren (falls Excel dann überhaupt noch nötig ist).

Vielleicht ist genau jetzt die richtige Zeit für Dich gekommen zu 
erkennen daß Excel zwar oft aber doch bei Weitem nicht immer das 
optimale Werkzeug für eine gegebene Aufgabe ist, daß es 
Aufgabenstellungen wie diese gibt die man mit anderen Werkzeugen viel 
einfacher bewältigen kann.
Gast #3856964
Lesenswert?

Das mit dem richtigen Werkzeug für die richtige Aufgabe ist natürlich 
richtig. Die Frage ist was willst Du mit den Daten anstellen? Und wie 
oft willst Du das machen?

Wenn Du das Ding nur graphisch darstellen möchtest, kannst Du es z.B. 
komplett mit Gnuplot erledigen und hast zusätzlich den Vorteil, daß es 
nur ein Einzeiler in einem Skript ist (das zu dem Thema wie oft möchtest 
Du das machen: Du hast einen universell programmierbaren Rechner, willst 
Du tatsächlich ständig irgendwelche Dateien öffnen, bearbeiten, als 
temporäre Dateien anlegen, in Excel öffnen und per Hand immer wieder ein 
Diagramm anlegen, Achsenbeschriftungen machen, skalieren und dann 
speichern? Das kann der Computer viel besser.) Falls Du auf Excel 
bestehst, wäre ein kleines VBA-Skript, wie in dem Link, den ich weiter 
oben gepostet habe, angebracht. Da klickst Du dann drauf, wählst die 
Datei aus, die Datei wird automatisch als binary eingelesen, die ersten 
paar Bytes verworfen und der Rest passend in ein Diagramm gefüttert oder 
in eine Spalte geschrieben.
Gast #3857196
Lesenswert?

Ein Beispielkommando für gnuplot:
set title "type of measurement";set xlabel 
"x-physical-quantity[x-unit]";set ylabel 
"y-physical-quantity[y-unit]";plot './Kopie.dat' binary format="%uint16" 
skip=792 using 1 notitle
Gast #3858073
Lesenswert?

Ich habe jetzt mal das VBA Script ausprobiert, es funktioniert auch 
soweit, daß ich die Daten alle in eine Spalte geschrieben bekomme, die 
Anzahl der Zeilen stimmt auch exakt mit der Dateigröße in Byte 
übereinander. Die ASCII Daten kann ich entfernen indem ich die Zeilen 
lösche so das nur die Messwerte übrig bleiben.

Allerdings sind die Messwerte ja 2 Byte lang und die Funktion "Binary 
Access Read" bietet keinen Parameter an wo ich den Datentyp deklarieren 
kann, sprich wenn ich die Daten in den Zeilen stehen habe, sind sie 
immer Byteweise getrennt.
Gast #3858089
Lesenswert?

Hast Du mal probiert
bytTemp As Integer
statt
bytTemp As Byte
zu deklarieren?
Das Abschneiden des ersten Teils schaffst Du auch noch in dem Skript 
unterzubringen, Tipp: Zaehlvariable, jeweils um eins hochzaehlen und 
dann if zaehlvariable<=792 Then Continue While

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren