Forum: PC-Programmierung Importieren csv in Matlab


von Tec (Gast)


Angehängte Dateien:

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

von rcc (Gast)


Lesenswert?

Den Import-Assistent verwenden oder die Hilfe zu textscan lesen.

von Tec (Gast)


Lesenswert?

Der Import-Assistent kommt mit der Datei nicht zurecht. Die Hilfe habe 
ich schon gelesen und bin am probieren.
Bin was MAtlab und Programmieren im Allgemeinen betrifft ein blutiger 
Anfänger und komme nicht auf die Lösung.

von rcc (Gast)


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.

von Tec (Gast)


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 :-(

von troll (Gast)


Lesenswert?

Ein Konverterskript in irgendeiner anderen Sprache (C, Python, Perl 
usw?)

von Alexander (Gast)


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

von Tec (Gast)


Lesenswert?

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

von Alexander (Gast)


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.

von Tec (Gast)


Lesenswert?

Das komma macht probleme, habe es eben versucht.

von remote1 (Gast)


Angehängte Dateien:

Lesenswert?

Schau dir mal das Script im Anhang an.
Hier lese ich eine Datei zeilenweise aus, ändere , in . und baue ein 
entsprechendes array auf.
Evtl. kannst du etwas davon verwenden.

von Niels K. (niesl)


Lesenswert?

FileName = 'test4.csv';

file = memmapfile(FileName,'Writable',true);
komma = uint8(',');
punkt = uint8('.');
file.Data(( file.Data==komma)' ) = punkt;
DataMatrix =importdata(FileName);

Achtung, der Schnipsel verändert deine Orginal-Datei. Kannst das Skript 
aber auch so anpassen, dass das nicht passiert.

von Tec (Gast)


Lesenswert?

Danke euch beiden,

funktioniert super.


Grüße
Tec

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.