I am reading many csv files and extracting columns 1, 6, 8, and 20. The delimiter is '","' because the csv is using double quotes. This is working great unless some of the data is flagged, in which case the everything is thrown out of whack. Data Example:

 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

Script reads perfect up to the * then everything is shifted so all I get is 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);

So I suppose my question is:

Can I Preformat each file with a loop to remove the flags OR change the textscan to ignore the flags all together so that my delimiter works.

Thanks for your input!

有帮助吗?

解决方案

Are the 'flags' the asterisks? You can use a terminal command like

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

to remove the asterisk and scan the result.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top