Forum: PC-Programmierung matlab textdatei einlesen


von Fsd F. (h_alb_leiter)


Lesenswert?

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.

: Bearbeitet durch User
von Freddy (Gast)


Lesenswert?

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.

von Fsd F. (h_alb_leiter)


Angehängte Dateien:

Lesenswert?

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?)

: Bearbeitet durch User
von Lukas K. (carrotindustries)


Lesenswert?

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 

: Bearbeitet durch User
von Fsd F. (h_alb_leiter)


Lesenswert?

Ok, soll ich die Datei anders speichern oder wie kann man das lösen?

: Bearbeitet durch User
von mahwe (Gast)


Lesenswert?

%exel auslesen

[xlsfile,path2xls] = uigetfile('*.xls', 'test.xls');
rawdata1 = xlsread(fullfile(path2xls,xlsfile));


BEISPIEL FÜR EXEL

von Lukas K. (carrotindustries)


Lesenswert?

Fsd Fdsfds schrieb:
> Ok, soll ich die Datei anders speichern oder wie kann man das lösen?

Woher kommt denn die Datei? Bei praktisch jedem besseren Texteditor kann 
man UTF-BOM an/aussschalten. Notfalls einfach die ersten drei Bytes 
abschneiden.

von Tom (Gast)


Lesenswert?

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.

von Fsd F. (h_alb_leiter)


Lesenswert?

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?

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.