Importieren csv in Matlab

Gast #3183992
Lesenswert?

Hallo,

zunächsteinaml muss ich erwähnen, dass ich ein Neuling in Matlab bin.

Nun zum Problem:
Ich habe eine Messdatei als cvs vorliegen, die zum einen Text enthält, 
zum anderen die Einträge nicht durch ein Komma, sondern durch ein 
Semikolon voneinander getrennt werden. Das Komma ist hier der 
Dezimaltrenner.

Ich möchte die Messdaten, also ab Zeile 3 und Spalte 2 als Matrix in 
einem Algorithmus weiterverarbeitn. Aber ich bekomme die Daten einfach 
nicht importiert.

Habe es unter anderem folgendem :

id0 = fopen('test4.csv','r');
fid1 = fopen('test5.csv','w');
fwrite(fid1,strrep(char(fread(fid0))',';',','));
fclose(fid0);
fclose(fid1);

m = csvread('test5.csv')

Jedoch steigt er bereits beim ersten Eintrag aus. Vermutlich weil da 
keine Zahl zu finden ist.

Habe es auch bereits mit textscan versuch und bin mir sicher, dass das 
damit funktionieren müsste. Aber leider bekomme ich den Code nicht hin.
Ich hoffe, ihr könnt mir auf die Sprünge helfen.

Grüße
Tec
Angehängte Dateien:
Gast #3184076
Lesenswert?

upsi, die .csv schaut im Editor ja furchtbar und nicht regelmäßig aus 
(1,4 MB ";" und 1kB Nutzdaten...)
Da ist es schon klar dass der Import-Assistent und textscan Probleme 
bekommen.
Workaround wäre z.B. csv im Excel aufmachen, neu speichern. Dann ist der 
Müll draußen und der Importassistent bzw. textscan kommen dann auch 
damit klar.
Gast #3184085
Lesenswert?

jop,
problrematisch an dem von dir vorgeschlagenen Vorgehen dürfte sein, dass 
die Datei hier im Anhang nur einen Kleinen Teil der Messdatei darstellt, 
in Wirklichkeit ist die Originaldatei 12,5 MB groß und hat insgesamt 1,4 
Millionen Einträge. Bei der Anzahl an Messdateien kommt der Umweg über 
excel leider nicht in Farge, das würde viel zu Lange dauern.

Es muss also direkt eingelesen werden :-(
Gast #3184126
Lesenswert?

Verwende dlmread, damit kannst du den delimiter angeben.
1
values=[0 4 2499 4]; % Input voltage
2
time1=[0 3 2499 3];
3
% character separated values (.CSV). Dilimiter is comma
4
delimiter=',';
5

6

7
%% ALL0000
8
time=dlmread('120V_50Ohm/ALL0000/F0000CH1.CSV',delimiter,time1);
9
V_C=dlmread('120V_50Ohm/ALL0000/F0000CH1.CSV',delimiter,values);
Gast #3184155
Lesenswert?

Tec schrieb:
> Danke, das mit dlm read probiere ich gleich aus. Aber wie mache ich ihm
> begeiflich, dass das Komma ein Dezimaltrenner ist?

Keine Ahnung, ob das Komma beim dlmread störend ist. Ggf. kannst du das 
Problem in den Windows Einstellungen (Region und Sprache oder wie das 
heißt) lösen, indem du das Dezimalzeichen als Komma deklarierst. Im 
schlimmsten Fall kannst du ein Script schreiben, das alle Kommas durch 
einen Punkt ersetzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren