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.
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.
Ene, meine, muh...
Oder wie wär's mal mit den ersten 800, ins ASCII-Hex-Format
konvertierten, Zeichen?
Noch besser, die Datei 1:1 als Anhang.
Muss aber nicht sein, wir können auch raten.
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.
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?
physiker schrieb:> Die Anleitung wäre auch praktisch.
Die Anleitung hab ich leider nicht hier, aber mehr als die im Startpost
beschriebenen Dinge stehen da nicht drin :-(
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.
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.
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.
Habe es mal mit hexdump printf in acht Spalten formatiert. Würde sagen,
daß erst ab Offset 130C überhaupt Nutzdaten kommen. Vorher siehst zu
regelmäßig aus.
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 ;-)
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 :-/
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.
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.
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.
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
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.
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