我正在阅读许多csv文件并提取第1,6,8和20列。分隔符是'“,”'因为csv使用双引号。除非标记了一些数据,否则这样做很有效,在这种情况下,所有数据都会被抛弃。数据示例:
Date Year Month Day Flag Min T Flag Max T
30/11/2007 2007 11 30 [Blank] -14.9 [Blank] -20.3
01/12/2007 2007 12 1 * -16 [Blank] -20.1
脚本读取完美至*然后一切都被移动所以我得到的只是NaNs。
fid1 = fopen(File, 'r');
Date = textscan(fid1, '%q %*s %*[^\n]', 'Delimiter', ',', 'HeaderLines', 25);
fclose(fid1);
Date = datenum(Date{1, 1}, 'yyyy-mm-dd');
fid1 = fopen(File, 'r');
Data = textscan(fid1, '%*s %*s %*s %*s %f %f %*s %*s %*s %*s %*s %f %*[^\n]',
'Delimiter', '","', 'HeaderLines', 25,'treatAsEmpty', {'M', '*', 'E', 'T', 'A', 'C',
'L', 'N', 'Y', 'S', 'F'}, 'multipledelimsasone', true);
fclose(fid1);
所以我想我的问题是:
我是否可以使用循环预先格式化每个文件以删除标记或更改文本扫描以忽略所有标记,以便我的分隔符可以正常工作。
感谢您的投入!
答案 0 :(得分:0)
'标志是'星号?您可以使用
之类的终端命令 Date = textscan(system(['sed "s/\*/ /g" ' File ]));
删除星号并扫描结果。