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 :-(
Ein Konverterskript in irgendeiner anderen Sprache (C, Python, Perl usw?)
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); |
Danke, das mit dlm read probiere ich gleich aus. Aber wie mache ich ihm begeiflich, dass das Komma ein Dezimaltrenner ist?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.