www.mikrocontroller.net

Forum: PC-Programmierung Auslesen/Umformatieren von Zahlen aus Messwertdatei


Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, bin auf der Suche nach einer einfachen Möglichkeit, diverse 8 & 
16 bittige Binär-Messwerte mit bekanntem Offset aus einer Datei 
auszulesen und Ascii-formatiert wieder in einer Datei abzuspeichern,die 
sich dann in Excel & Co. weiterverwenden lässt! Evt. gibt es dafür schon 
fertige Software? Gruß Otto

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist doch schneller programmiert als gesucht ;-)

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag sein. Doch nur mit Werkzeugen, die meist über Jahre zu erlernen 
sind. Irgendeine einfache Möglichkeit scheint es da nicht zu geben, 
oder?

Autor: Chris G. (vector)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich würde Stefan recht geben...
Falls du des Programmierens nicht mächtig bist, kannst du es ja mal mit 
Scilab probieren. Mit Scicos sollte sich sowas ziemlich einfach 
modellieren lassen.

Gruss
  Chris

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie es scheint muss eine einfache scriptsprache o.ä. die das schafft 
noch erfunden werden. da kann man nehmen was man will, ob scilab, 
labview, perl oder irgendeine hochsprache- alles will erst aufwendig 
erlernt sein ehe sich die simpelsten probleme lösen lassen :-((

Autor: Eric Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Otto, das stimmt schon. Wenn ein Problem einfach ist heisst das noch 
lange nicht das es sich schnell lösen lässt. Kommt eben immer auf die 
Werkzeuge an, die zur Verfügung stehen :-))

Autor: Chris G. (vector)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deswegen hatte ich gedacht du machst es "grafisch" und nicht per 
scriptsprache...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
otto wrote:
> wie es scheint muss eine einfache scriptsprache o.ä. die das schafft
> noch erfunden werden. da kann man nehmen was man will, ob scilab,
> labview, perl oder irgendeine hochsprache- alles will erst aufwendig
> erlernt sein ehe sich die simpelsten probleme lösen lassen :-((

Autofahren ist auch simpel und muss trotzdem erst aufwendig
erlernt werden.
Für dich ist stehen, gehen, laufen simpel und trotzdem hat es
Monate gedauert bevor du es konntest.

Für jemanden, der Programmieren kann, ist dein Problem
tatsächlich ziemlich simpel. Kompliziert wird es nur dadurch,
wenn es allgemein verwendbar werden soll, also die Bytepositionen
sowie die Datentyplängen und das zugehörige Ausgabeformat
konfigurierbar sein soll.

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja, ich hatte nur gehofft für diese einfache Sache gibts auch auf 
die Schnelle eine einfache programmiertechnische Lösung- OK, Irrtum. 
Sich allein deswegen Boliden wie die obengenannten aufzuhalsen ist 
sicher kaum sinnvoll. Im übrigen sind bestimmt auch für den gestandenen 
Programmierer schnelle,einfache,zielführende Werkzeuge das Mittel der 
Wahl- schon deshalb weil unser aller Zeit begrenzt ist. Das sind o.g. 
definitiv nicht.
Gruss Otto

Autor: Michael Niegl (bigmike47)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, fuer jeden durchschnittlichen programmierer ist das in zb c++ eine 
arbeit von ca. 10min, also ich wuesste nicht, was da noch viel simpler 
sein sollte...?
wuerde echt gern wissen, was du dir da fuer dein problem als loesung 
vorstellen wuerdest, ausser einem anderen, der das kann, zu sagen: mach 
mal.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
otto wrote:
> Nun ja, ich hatte nur gehofft für diese einfache Sache gibts auch auf
> die Schnelle eine einfache programmiertechnische Lösung- OK, Irrtum.

Oh. die gibt es.
Wie schon gesagt. Im Grunde ist das Problem realtiv simpel.

Was dir vorschwebt, gibt es aber nicht. Dazu ist diese
Problemstellung zu selten. Es gibt kein fertiges Werkzeug
dafür.
Um eine Analogie zu bemühen: Einen LKW kann man von der Stange
kaufen, kein Problem. Auch kleinere Sonderausstattungen bzw.
Umbauten sind kein Problem. Warum? Weil diese AUfgabenstellung
so oft vorkommt, dass die Firmen darauf reagiert haben und sich
einen Baukasten dafür zurechtgelegt haben.
Willst du aber eine Transportplatform, mit der man ein Shuttle
zur Rampe karren möchte, dann wirst du das bei Mercedes so nicht
kaufen können, sondern da muss ein Experte ran, der Erfahrung
mit Transportfahrzeugen hat. Für den ist es dann wiederrum kein
Problem so ein Ding zu entwerfen.

> Sich allein deswegen Boliden wie die obengenannten aufzuhalsen ist
> sicher kaum sinnvoll. Im übrigen sind bestimmt auch für den gestandenen
> Programmierer schnelle,einfache,zielführende Werkzeuge das Mittel der
> Wahl-

Exakt. Und was schnelleres als eine Programmiersprache die
man beherrscht gibt es nicht. Gegen einen guten C oder C++
Programmierer hast du mit all deinen Klicki-Bunti Werkzeugen
keine Chance, wenn es ans Eingemachte geht.

Ich hab schon überlegt, ob ich dir nicht so ein Teil schreibe,
aber ich fürchte das artet in ein Fass ohne Boden aus. Vor allen
Dingen deshalb weil ich davon ausgehen muss, dass du eine
vorgegebene Programmschablone nicht abändern kannst und ich daher
Konfigurationsmechanismen noch und nöcher vorsehen muss. Und
dann wirds aufwändig.
Wie gesagt: Das rausholen von Bytes oder Bytesequenzen aus
einer binären Datei und Ausgabe als Text in eine Datei ist
für jeden Programmierer Pipikram, aber das drumherum ...

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
otto wrote:
> Nun ja, ich hatte nur gehofft für diese einfache Sache gibts auch auf
> die Schnelle eine einfache programmiertechnische Lösung- OK, Irrtum.

Wie einfach solls denn sein?

In der Scriptsprache python würde die Lösung so aussehen:

## Datei einlesen
data = open("data.bin","rb").read()
## die ersten 100 Bytes als ASCII ausgeben.
for d in data[:100]:
    print ord(d)

Die Anhänger von perl könnten dieses Problemchen sicherlich auch in 
einer Zeile lösen.

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist mir ja fast ein wenig peinlich, Angebote für fertige Lösungen zu 
erhalten, denn mehr als Hilfe zur Selbsthilfe hatte ich gar nicht 
erwartet! Nachdem es fertige Soft dafür wohl nicht gibt und nach einiger 
Recherche im Netz werde ich mich jetzt mal mit der Schlange anlegen, um 
den "Pipikram" endlich zu erledigen. Denn -und danke meinem Vorredner 
für den Tipp-, die Python macht schon den Eindruck, das noch am 
einfachsten zu bewerkstelligen. Obwohl der Teufel bekanntlich meist im 
Detail liegt.

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Otto

sofern du die Möglichkeit hast, auf das binäre Meßwerte Format Einfluß 
zu nehmen, wäre folgendes vielleicht nützlich:

lass dir die Daten in ein ASN.1 Format abspeichern / übermittlen, dabei 
wird sowohl der Datentyp als auch der Wert übermittelt.

ASN.1 Decoder gibt es wie Sand am Meer, und du bist dann volllkommen 
frei von Formatänderungen

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wegstabenverbuchsler Das wär natürlich auch eine Möglichkeit. Am 
liebsten aber würde ich es gleich Ascii-fertig übermitteln lassen. Bei 
den Daten handelt es sich aber um einen Speicherauszug einer 
MC-Steuerung, der möglichst platzsparend in kurzen Abständen auf 
SD-Karte archiviert wird. Daraus sollen dann später am PC alle möglichen 
Informationen in geeignetem Format extrahiert werden können. Irgendeine 
Vorformatierung würde das (durch eine langsame serielle Verbindung 
übermittelte) Datenvolumen inakzeptabel anwachsen lassen.
Gruss Otto

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evtl. könnte das Problem auch mit regulären Ausdrücken zu lösen sein. 
Wenn du WinAVR installiert hast ist sed auch schon dabei.

Wenn man sich mit der (zwar etwas kryptischen) Syntax einmal vetraut 
gemacht hat, ist das ein sehr mächtiges Werkzeug. Andere Sprachen 
unterstützen auch reguläre Ausdrücke (z.B. Perl, php, für C++ gibt es 
auch entsprechende Bibliotheken).

Was so ein "einfacher" Stream-Editor wie sed bei geschickter 
Programmierung alles kann sieht man sehr schön an diesem Beispiel (ein 
Taschenrechner mit einstellbarer Genauigkeit):

http://sed.sourceforge.net/grabbag/scripts/dc.sed

PS:
Wenn ich den Code sehe fällt mir ein Kommentar zur Sprache Perl ein:
"Sieht aus wie nach einer Explosion in einer ASCII-Fabrik"

Autor: nemon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wär es mit einem hex-editor?

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die modifizierte Datei in Excel einlesen willst, warum dann 
soviel Aufwand ?

Du kannst eine solche Binärdatei mit Excel direkt einlesen ( 
Importieren) und innerhalb Excel in jedes beliebige Format convertieren.

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ralph, das wär zu schön um war zu sein- aber welcher Dateityp soll 
das genau sein? Eine gewisse Vorformatierung setzt Excel doch bei jeder 
Import-Datenquelle voraus? Wie sollte Excel sonst die Strukturierung 
beliebiger Daten ermitteln können die nur ein buntes Sammelsurium von 
Zahlen und Strings aller Art sind?

@nemon Die Erstellung einer Textdatei aus o.g. Sammelsurium soll nicht 
zu stupider Handarbeit ausarten :-)

Otto

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas Stream-Editor klingt gut- nur leider setzt sed als Quelle 
Textdateien voraus. Eine Scriptsprache wie Python ist da doch viel 
flexibler. Hoffe ich jedenfalls.

Otto

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Excel lassen sich .txt; .cvs; und viele andere Dateien importieren.
Die Dateien müssen nur endweder feste Trenner zwischen den Werten haben 
zb. TAB, SPACE, KOMMA,SEMIKOLON,.... oder feste Spaltenbreiten haben. 
Ein LineFeet am Zeilenende ist auch hilfreich.

Aber das lässt sich ja beim erzeugen der Meßdatei so organisieren.

Importiere dann in eine Tabelle und mach in der 2. Tabelle deine 
Convertierungen.
Dann musstdu mit einer neuen Meßdatei ( gleicher Dateiname und Pfad) die 
1. Tabelle aktualisieren und alles wird automatisch geändert.

Wichtig ist nur das deine Meßdatei eine gleichbleibende Structur hat.

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Otto

Wenn du mir eine Testdatei zukommen lässt (mit all den Informationen die 
dir selbst auch vorliegen) kann ich sowas sicher schnell zusammenbauen. 
Sollte kein größerer Aufwand sein wenn ichs bis dato richtig verstanden 
habe - kommt eben auf die Details an, daher würd ich mir erst gern eine 
Testdatei ansehen :)

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Ralph eben, das ist es ja- die Messdatei hat keine gleichbleibende 
Struktur und daraus lässt sich aus den weiter o.g. Gründen auch nichts 
ändern. Wär ja toll wenns auf die Weise ginge "Wenn es keine Lösung für 
Dein Problem gibt, dann ändere einfach Dein Problem" :-) Um die 
Zwischenkonvertierung hin zu einem Excel-tauglichen Importformat geht es 
mir ja gerade.

Autor: otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

danke vielmals für das Angebot- ich bin überzeugt davon, dass sich sowas 
mit entsprechender Sachkenntnis schnell zusammenbauen lässt- doch 
letztere möchte ich nun selbst erwerben, nachdem es die "fertige" Lösung 
offensichtlich nicht gibt. Ich denk mal a new Python-Fan was born :-).

Otto.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eingefleischte Unixer würden das mit od machen (gibt's auch für
Windows). Um 20 Bytes ab dem 50. Byte als 2-Byte Werte in
Dezimaldarstellung mit Vorzeichen aufzulisten, gibt man einfach
od -j50 -N20 -Ad -td2 -w2 -v datei

ein. Dabei bedeuten

  -j50  die am Anfang der Datei zu überspringenden Bytes (Default 0)
  -N20  die Anzahl der zu lesenden Bytes (Default alle)
  -Ad   das Format für die Adressausgabe (d=dez, x=hex, o=okt)
  -td2  das Format für die Daten (d=dez(signed), u = dez(unsigned),
        x=hex, o=okt, f=float, a=ASCII-Zeichen) und die Wortbreite
        (1, 2, 4, oder 8)
  -w2   Die Anzahl der Bytes pro Ausgabezeile

Beispielausgabe mit obigen Argumenten:
0000050   2625
0000052  12849
0000054  13363
0000056  25653
0000058  26209
0000060  27500
0000062  29546
0000064  27748
0000066  27494
0000068  29546
0000070

Aber Python ist auch eine sehr gutes Werkzeug, da du damit flexibler
bist und noch viele andere lustige Dinge damit machen kannst. Eine
Programmiersprache sollte man im Leben sowieso gelernt haben ;-), und
Python ist eine von denen, wo man mit minimaler Einarbeitung,
minimalem Anfangsfrust und minimaler Tipparbeit maximale Ergebnisse
erzielt. Das Beispiel von Werner Hoch gibt einen kleinen Vorgeschmack,
aber nicht viel komplizierter sieht bspw. ein Web-Server aus, der
variable Messdaten auf einer Web-Seite ausgibt. Kurz: Python rockz!

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo yalu,

von od habe ich noch nie etwas gehört, aber es befindet sich tatsächlich 
auch auf meinem Rechner.

> Eine Programmiersprache sollte man im Leben sowieso gelernt haben ;-),

In dem Buch "Der pragmatische Programmierer" wird IIRC empfohlen, jedes 
Jahr eine neue Sprache zu lernen.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> von od habe ich noch nie etwas gehört, aber es befindet sich
> tatsächlich auch auf meinem Rechner.

Dein PC - das unbekannte Wesen :)

> In dem Buch "Der pragmatische Programmierer" wird IIRC empfohlen,
> jedes Jahr eine neue Sprache zu lernen.

Autsch, da muss ich aber noch eine Menge nachholen. Hat jemand
vielleicht gute Vorschläge? Die Sprache darf ruhig etwas abgespacet
sein (in Sprachen wie C# fehlt einfach der Pfeffer), sie sollte sich
aber nachweislich auch für größere Softwareprojekte eignen. Also Lisp
wäre bspw. ok*, so etwas wie hier

  http://de.wikipedia.org/wiki/Esoterische_Programmiersprache

hingegen nicht, obwohl die auch ihren Reiz haben.

Bin mal auf Vorschläge gespannt :)

*) ist aber schon raus, da ich das schon zweimal gelernt (und wieder
vergessen) habe ;-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie wäre es mit Delphi. Programmiersprache PASCAL. 'Turbo Delphi' gibt 
es bei Borland kostenlos. Die Oberfläche eines Programms ist schnell 
zusammengeklickt und der Code ist weniger kryptisch als bei C.

MfG Spess

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@spess53

Danke für die Antwort!

Pascal habe ich früher mal gemacht und empfand es auch als sehr gute
Sprache, bis mir igendwann C über den Weg lief, das mir noch besser
gefallen hat. Die Kryptizität von C finde ich nicht schlimm. Es werden
halt für Operatoren, die in Pascal als englische Wörter ausgeschrieben
sind, Sonderzeichen verwendet und BEGIN und END durch geschweifte
Klammern ersetzt. Aber sonst ist die Syntax der beiden Sprachen doch
sehr ähnlich.

Auch wenn Delphi meiner Meinung nach sprachlich nicht so viel
Spektakuläres mit sich bringt: Am vielgepriesenen Komfort bei der
GUI-Erstellung scheint wirklich etwas dran zu sein. Ein Kollege, der
kaum programmieren konnte (aber das wenige hat er in Delphi gemacht),
hat uns arme MSVC-Benutzer immer belächelt, wenn wir damit mühevoll
unsere GUIs zusammenbastelten. Bei ihm mit seinem Delphi ging das im
Vergleich dazu immer ratzfatz.

Es gab doch auch mal ein Delphi für Linux namens Kylix. Gibt es das
eigentlich noch irgendwo? Bei Borland bzw. Codegear konnte ich es
nicht finden, obwohl mehrere Links von anderen Webseiten dorthin
zeigen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Kylix wird von Borland meines Wissens nicht mehr unterstützt. Eine freie 
Version gab es mal auf einer c't-HeftCD.
Ich habe zu Dos-Zeiten mit Turbo-Pascal programmiert. Da kam mit für 
Windows Delphi gerade Recht. Im Moment benutzt ich Delpi6 Prof. MS 
Visual C++ und Basic habe ich mir mal angesehen, konnte aber nicht so 
richtig warm damit werden. Da ist das fast 7 Jahre alte Delphi6 
komfortabler und umfangreicher.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.