3

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

脚本读取完美到 * 然后一切都被转移,所以我得到的只是 NaN。

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);

所以我想我的问题是:

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

感谢您的输入!

4

1 回答 1

0

“标志”是星号吗?您可以使用终端命令,例如

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

删除星号并扫描结果。

于 2013-01-14T22:23:08.220 回答