WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Octave textread fügt Zeichen ein -> Problem mit der Date

 

EMCanonym

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2020, 12:10     Titel: Octave textread fügt Zeichen ein -> Problem mit der Date
  Antworten mit Zitat      
Hallo zusammen,

ich hänge direkt mal das File an, um welches es beim einlesen geht (TEST.txt). Normalerweise ist die Dateiendung ".Result", es ist allerdings nicht möglich, diese hier im Forum hochzuladen. Alle Phänomene beim Einlesen zeigen sich allerdings auch nach der Umbenennung in ".txt".
Die Datei enthält Messdaten einer Software und soll in Octave oder Matlab zur weiteren Verwertung eingelesen werden.
Mit der Funktion xlsread (Excel Dezimaltrennzeichen auf "." gestellt) funktioniert das auch wunderbar [num txt raw] = xlsread(...).

Lese ich allerdings auf der Suche nach Performance-Steigerung mit...

Code:
a = textread('TEST.Result', '%s', 'delimiter', '\r\n');


...dann wird zum einen zu Beginn ein Ersetzungszeichen (weißes Fragezeichen auf schwarzer Raute) "erkannt", welches ich selbst in Notepad++ unter der Anzeige aller Zeichen nicht sehe. Des weiteren ist jede zweite eingelesene Zeile eine Leerzeile (auch, wenn ich den delimiter nicht vorgebe).
Greife ich dann weiterhin auf eine einzelne eingelesene Zeile zu, so habe ich zwischen allen Zeichen der Datei ein zusätzliches Zeichen, ein blank space scheint es nicht zu sein.

Hier mein Code-Fragment, um zu meiner Darstellung zu kommen (b enthält dann die erste Zeile der Messdaten und wenn man es ausgibt, dann erkennt man die vermeindlichen Leerzeichen zwischen den Zeichen):

Code:

a = textread('TEST.Result', '%s', 'delimiter', '\r\n');
b = a{59};
 


Es ist möglich nun zeilenweise jedes zweite Zeichen zu verwenden, aber nicht zielführend. Bei großen Messdateien dauert das dann deutlich länger, als mit xlsread (es muss ja dann zeilen- und spaltenweise gefiltert werden).

Die mir wichtigsten Fragen:
1. Was liest Octave/Matlab da als erstes (Ersetzungs-)Zeichen ein (a{1}(1))?
2. Warum wird jede zweite eingelesene Zeile eine Leerzeile?
3. Warum habe ich zwischen den einzelnen Zeichen weitere Zeichen, die vorher bei Ansicht in notepad++ nicht vorhanden sind?
4. Gibt es Editoren/Reader, mit denen diese Zeichen sichtbar werden?

Ich freue mich auf Ansätze zur Lösung meines Problems/ zum sauberen Scannen der Datei!! Smile

Beste Grüße,
Marcel

TEST.txt
 Beschreibung:
Ergebnisdatei

Download
 Dateiname:  TEST.txt
 Dateigröße:  7.36 KB
 Heruntergeladen:  291 mal
TEST.txt
 Beschreibung:

Download
 Dateiname:  TEST.txt
 Dateigröße:  7.36 KB
 Heruntergeladen:  292 mal


EMCanonym

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2020, 14:46     Titel: Antwort
  Antworten mit Zitat      
Hallo nochmal,

ich habe mittlerweile selbst Fortschritte gemacht. Und zwar habe ich mir das HEX-Plugin für notepad++ installiert und mir den HEX-Code angesehen. Dort war dann zu erkennen, dass jede zweite Hex-Zahl ein "00" war.

Mit folgendem Code habe ich dann die Datei als Zeichenkette eingelesen und in HEX konvertiert. Anschließend habe ich die ersten beiden (unbekannten) HEX-Zahlen ignoriert und anschließend jede zweite HEX-Zahl entfernt. Die anschließende Konvertierung in ASCII-Zeichen und ein strsplit (zunächst Wiederherstellen der Zeilenumbrüche, dann Trennen der einzelnen Zeilen) bringt das gewünschte Ergebnis.

Code:

filestr = fileread('Test.Result');
hex = dec2hex(double(filestr));
hex = [hex(3:2:end,1), hex(3:2:end,2)];
ascii = strsplit(char(hex2dec(hex))', '\r\n')';
ascii = cellfun(@(x) strsplit(x, '\t') , ascii, 'UniformOutput', false);
 


Die Performance wird durch das Trennen der einzelnen Zeilen jedoch mit steigender Dateigröße katastrophal. Einziger Vorteil gegenüber der Nutzung von xlsread ist die Unabhängigkeit von Excel und dessen Einstellungen bezüglich der Dezimaltrennzeichen.

Falls jemand noch Vorschläge zur Optimierung der Performance hat, gerne her damit Smile.

Beste Grüße,
Marcel
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.12.2020, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

in MATLAB reicht folgendes:
Code:
data = readmatrix('TEST (2).txt', 'Headerlines', 30);


Ob Octave diesen Befehl hat, weiß ich nicht.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.