matlab textdatei einlesen

OP #3919015
Hallo,

möchte eine Textdatei mit Matlab einlesen.
Mache das mit dem folgendem Befehl:
fid=fopen('logfile.txt','r');
C=textscan(fid,'%s %s %s');
 und an der Stelle habe ich ein Verständnisproblem und zwar
%s heißt ja es wird ein String ausgelesen.

Der Logfile hat diese Form:
2560788 usecs: file start
7658115 usecs: file closed

C=textscan(fid,'%s %s %s');zeigt mir folgendes:
C{1}{1} =

2560788

C{1}{2} =
7658115

Was sind das für komische Zeichen    und woher kommen sie?
%s heißt ja es wird ein String ausgelesen. In meinem Logfile sind die 
Zahlen zu sehen. Warum kann Matlab sie nicht nicht als Integer 
auffassen?
C=textscan(fid,'%u16 %s %s') oder C=textscan(fid,'%d16 %s %s') zeigt, 
dass der Inhalt der Datei leer ist.
Gast
Hallo,

Matlab bietet viele Möglichkeiten Dateien einzulesen.
Angefangen beim >dlmread<, >csvread< bis hin zum fopen und fscanf....

Textscan importiert übrigens in Cells.

Kannst Du vielleicht mal Dein logfile.txt posten, damit man das Problem 
sehen kann.

Fopen und fscanf ist übrigens das universellste, weil es eine sehr 
Änhlichkeit mit C bietet.
OP
Anbei ist der Logfile.

Wie gesagt, die Zahl an der ersten Stelle der jeweiligen Zeile wird nur 
erkannt, wenn ich sie string bezeichne. Wieso?  Die Ausgabe sieht dan so 
aus:

2560788

Woher komt  ?  Erwartet Matlab eventuell noch eine Angabe? (Header 
oder so  was?)
Angehängte Dateien:
Fsd Fdsfds schrieb:
> Woher komt  ?

Du hast das Glück eine Textdatei mit UTF8-BOM am Anfang zu haben:

$ curl http://www.mikrocontroller.net/attachment/240010/logfile.txt | 
xxd | head -n 2
0000000: efbb bf32 3536 3037 3838 2075 7365 6373  ...2560788 usecs
0000010: 3a20 7374 6172 740d 0a37 3635 3831 3135  : start..7658115

das "efbbbf" zu begin ist die BOM. In Windows-1251 ist das dann eben 
Gast
Selbst die Altlastensammlung Matlab kann inzwischen UTF8 lesen, siehe 
Doku zu fopen. Das richtige Encoding anzugeben ist auf Dauer sinnvoller 
als das Textfile vorher zu bearbeiten.
OP
Habe die Datei mit Editor erstellt.
Mit OpenOffice erstellen und als .txt speichern hat geholfen.

Mit C=textscan(fid,'%s %s %s');
Erstellt matlab eine Exceltabelle, wo in der Tat alle Zahlen und Wörter 
sauber abzulesen sind.

Mit C=textscan(fid,'%u18 %s %s');
werden alle Zahlen, die in einer Spalte eingetragen wurden auf einmal in 
eine Zeile hintereinander geschrieben
So:
[2560788;7658115;15231059;20332392;27901525;32999353].

Wieso? Ich möchte später ein Plot erstellen, die Zahlenwerte brauche ich 
für einen Graph. Erkennt Matlab sie nicht als Zahlenwerte an, wenn sie 
mit %s bezeichnet werden?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.