Split into different columns a .csv file with characters ';'

18 次查看(过去 30 天)
I have a large .csv file with the below format ('Date;Time;Value').
'16/4/2017;05:12:02;1.21'
and need to import it into 3 collumns.
'16/4/2017' '05:12:02' '1.21'
My code is:
fid = fopen('KD.csv','r');
C = textscan(fid, '%s %s %f %f %s', 'HeaderLines',1, 'CollectOutput',true);
fclose(fid);
[dt,val,exch] = deal(C{:});
w=regexp(dt,'\s+','split')
out=reshape([w{:}],1,[])'
time = [dt regexp(dt, '\d\d:\d\d:\d\d', 'match', 'once')]
Any help?

采纳的回答

Guillaume
Guillaume 2017-5-1
Even better than xlsread, readtable would be a much better and modern option. If the header line that is skipped actually contains columns names readtable could even parse these. Skipping it, as in the original code:
kd = readtable('KD.csv', 'delimiter', ';', 'ReadVariableNames', false, 'HeaderLines', 1);
kd.Properties.VariableNames = {'dt', 'val', 'exch'}; %name the columns of the table
Note that readtable is usually clever enough to detect the delimiter, number of lines to skip and whether or not the variable names are included, so:
kd = readtable('KD.csv');
may be enough.
  3 个评论
Guillaume
Guillaume 2017-5-2
"thanks a lot! "readtable" did exactly what i needed!"
So why did you unaccept the answer? Because it didn't answer your completely different other question which wasn't asked in the first place?
"i should convert time from non-numeric form to what?"
If readtable didn't already convert your time to datetime. You can do it manually,
kd.val = datetime(kd.val, 'InputFormat', 'HH:mm:ss');
Modern versions of matlab know how to plot against datetime.

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by