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