我有一个带有多个列的csv,第二列是唯一一个带有字符串的列,因为它为变量命名。我用fopen打开csv,并希望使用textscan将其内容存储在单元格中。但是,在数字列中有许多非数字值(错误),其中都带有逗号。我希望textscan在他们的位置写NaN而不是停下来。这就是我所拥有的:
fileID = fopen(input,'r');
cell = textscan(fileID, '%n %s %n %n %n %n %n %n %n','Delimiter',',','HeaderLines',1,'ReturnOnError',false, 'EmptyValue',NaN, 'TreatAsEmpty','*,*');
fclose(fileID);
非常欢迎任何帮助。
答案 0 :(得分:0)
假设您的数据如下所示:
col1,col2,col3,col4,col5,col6,col7,col8,col9
1,n1,1,1,fgd,1,1,1,1
2,n2,2,2,2,2,dfdf,2,2
3,n3,3,3,3,3,3,str1,223,,3
,您别无选择更改数据
textscan()
不够聪明,无法检测到。
我建议一种类似的方法:
fid = fopen('c.csv');
data = char(fread(fid))';
fclose(fid);
data = split(data);
现在您可以逐行(逐个单元)解析数据。
{'col1,col2,col3,col4,col5,col6,col7,col8,col9'}
{'1,n1,1,1,fgd,1,1,1,1' }
{'2,n2,2,2,2,2,dfdf,2,2' }
{'3,n3,3,3,3,3,3,str1,223,,3' }
或
fmt = '%s %s %s %s %s %s %s %s %s';
data = textscan(fid, fmt, ...
在解析循环中的某个地方,您可以使用str2double,如果它不是数字,将导致NaN
:
>> str2double('str')
ans =
NaN