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
Das ist doch schneller programmiert als gesucht ;-)
Mag sein. Doch nur mit Werkzeugen, die meist über Jahre zu erlernen sind. Irgendeine einfache Möglichkeit scheint es da nicht zu geben, oder?
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
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 :-((
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 :-))
Deswegen hatte ich gedacht du machst es "grafisch" und nicht per scriptsprache...
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.
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
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.
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 ...
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.
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.
@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
@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
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"
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.
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
@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
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.
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 :)
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.
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.
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
1 | 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:
1 | 0000050 2625 |
2 | 0000052 12849 |
3 | 0000054 13363 |
4 | 0000056 25653 |
5 | 0000058 26209 |
6 | 0000060 27500 |
7 | 0000062 29546 |
8 | 0000064 27748 |
9 | 0000066 27494 |
10 | 0000068 29546 |
11 | 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!
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.
> 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 ;-)
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
@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.
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
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.