|
|
Formatiertes einlesen einer Datei |
|
AkkiAkk |

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 11.04.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.04.2016, 19:36
Titel: Formatiertes einlesen einer Datei
|
 |
Hallo,
ich habe folgendes Problem, für das ich in der Suche noch keine zufriedenstellend Antwort gefunden habe.
Ich habe eine .txt-Datei mit (hex-) Daten in folgender Form:
01 8C 00 80 BB BB 0F FF 0F FF [...]
Ich möchte daraus zwei Vektoren generieren und die Zeichenfolge BB BB ignorieren bzw. als Trennzeichen benutzen. Am Ende sollen zwei Vektoren A und B rauskommen, sodass:
A = [018C 0080]
B = [0FFF 0FFF]
Es gehören also immer vier Zeichen zusammen, nur jedes zweite Leerzeiche ist sozusagen eine wirkliche Trennung.
Mit textscan und fscanf habe ich das noch nicht hinbekommen. Hat jemand eine konstruktive Idee wie man das Problem bewältigen könnte?
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 11.04.2016, 20:31
Titel:
|
 |
Zitat: |
Mit textscan und fscanf habe ich das noch nicht hinbekommen. |
was hast du denn versucht und was hat dabei nicht geklappt ?
sihe dazu auch den thread aus meiner signatur
grüße winkow
_________________
richtig Fragen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.04.2016, 21:19
Titel: Re: Formatiertes einlesen einer Datei
|
 |
Hallo AkkiAkk,
Zitat: |
Ich habe eine .txt-Datei mit (hex-) Daten in folgender Form:
01 8C 00 80 BB BB 0F FF 0F FF [...] |
Wenn ich Dich richtig verstehe, sind die keine hex-Daten, sondern CHARs, also ganz normaler Text. Richtig? Für die Einlese-Routine ist es erstmal vollkommen egal, ob da "01 8C" oder "TZ Uv" steht, oder?
Was soll nun genau "A = [018C 0080]" sein? Ein String in der Form '018C 0080' mit einem Leerzeichen in der Mitte? Oder eine CHAR-Matrix:
Oder ein Cell-String
Was genau verbirgt sich hinter "[...]"? Spielt der folgende Inhalt eine Rolle oder nicht?
Am besten wäre es, Du postet ein Beispiel File und den gewünschten Output in valider Matlab-Syntax.
Gruß, Jan
|
|
|
AkkiAkk |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 11.04.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.04.2016, 22:40
Titel:
|
 |
|
 |
|
Vielen Dank für die schnellen Antworten und entschuldigung wenn ich mich vielleicht etwas unklar ausgedrückt habe.
Ein exemplarisches File könnte folgenderweise aussehen (in der Realität mit viel mehr Elementen):
01 8C 00 80 BB BB 00 BF 0F 56 BB BB 05 7B 0C 30 BB BB 09 28 F0 14 BB BB 2A 65 01 8C BB BB 09 7C 0A B3
Nun ist es so, dass dies hex-Zahlen sind (wichtig, da ich die Daten noch plotten möchte). Von den Daten gehören immer zwei byte zusammen, also vier "Ziffern" (Bsp.: 018C ist eine Zahl. Oder 0080).
Die vier aufeinanderfolgenden Bs dienen dabei als Trennzeichen für zwei verschiedene Kanäle.
Es kommen erst Daten von Kanal 1, dann Trennzeichen BB BB, dann Daten von Kanal 2, dann BB BB, dann Daten von Kanal 1, dann BB BB, dann Kanal 2 usw.
Im Prinzip will ich am Ende zwei Vektoren (ob Spalte oder Zeile ist egal), einen für die Daten von Kanal 1 und einen für Kanal 2:
Kanal1 = [ 018C, 0080, 057B, 0C30, 2A65, 018C ]
Kanal2 = [ 00BF, 0F56, 0928, F014, 097C, 0AB3 ]
Bei textscan weiß ich nicht, wie ich die zusammenhängenden bytes aneinanderreihen kann. Also wie ich z.B. aus 01 8C ein 018C mache und dann das nächste Leerzeichen als Trennstelle nehme. Irgendwie muss ich ja jedes zweite Leerzeichen übergehen um aus 01 8C 00 80 zum machen
018C 0080.
Wenn ich schreibe
dann würde ja jedes byte abwechselnd in den einen und den anderen Vektor geschrieben werden, ich mächste ja aber die erst beiden byte in einen, die beiden danach in einen anderen, dann Trennzeichen BB BB ignorieren und so weiter.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.04.2016, 09:03
Titel:
|
 |
Hallo AkkiAkk,
Ich stelle meine Frage nochmal:
Verstehe ich es richtig, dass das die Ausgabe des Files in einem Text-Editor ist:
?
Zitat: |
Kanal1 = [ 018C, 0080, 057B, 0C30, 2A65, 018C ]
Kanal2 = [ 00BF, 0F56, 0928, F014, 097C, 0AB3 ] |
Dies ist nach wie vor nicht klar. Bitte gebe diese Zeilen doch mal im Command-Window ein. Dies wird Dir eine Fehlermeldung geben, weil es keine valide Matlab-Syntax ist.
Wenn es Strings sein sollen, müssen sie in Quotes eingeschlossen werden. Dann ist
A = ['018C', '0080']
aber das gleiche wie
A = '018C0080'
. Plotten kannst Du aber nur Zahlen. Wozu dient dann überhaupt die HEX-Darstellung, die ja aus CHAR-Strings besteht?
Wahrscheinlich lässt sich das schnell lösen, aber es ist zunächst notwendig zu klären, welche Outputs Du überhaupt brauchst.
Ich rate mal:
Jetzt hast Du einen Vektor mit den einzelnen Bytes. Wie Du daraus die gewünschten Zahlen machst, hängt von der Definition des File-Formats ab.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|