textcan在csv文件中的列上,包含flaggin数据的列,分隔符问题

时间:2013-01-14 21:25:48

标签: matlab delimiter textscan

我正在阅读许多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);

所以我想我的问题是:

我是否可以使用循环预先格式化每个文件以删除标记或更改文本扫描以忽略所有标记,以便我的分隔符可以正常工作。

感谢您的投入!

1 个答案:

答案 0 :(得分:0)

'标志是'星号?您可以使用

之类的终端命令

Date = textscan(system(['sed "s/\*/ /g" ' File ]));

删除星号并扫描结果。