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.
Was für eine Binärdarstellung haben die Zahlen? Sind das Integer oder Floats (IEEE...), wie lang? Ansonsten mußt Du auch unter Excel für so etwas programmieren: http://www.vbforums.com/showthread.php?430424-Reading-a-Binary-File-into-Excel-using-VBA Du weißt ja wieviel Text kommt, abzählen, und ab dann die binary Daten passend umwandeln.
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.
Korrektur: Wahrscheinlich von 1 an, nicht 0, da die 0 nur dreimal vorkommt.
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
Bzw. 396 statt 792 als Bedingung, da dann ja 2 Byte weise gelesen wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.