0
我有一个包含许多.csv文件的文件夹。在每个.csv文件的第一行中,有49个参数名称,在所有其他行中,这些参数有49个值。我需要读取每个文件并分离参数及其相应的值。如果一个值为空,我需要输入一个NaN
,然后是零而不是那个。我写的代码适用于除第二列(第二个参数)之外的所有参数,其值是日期和时间,我的代码将NaN
用于此参数的所有值。在Matlab中导入和解析.csv文件
这里是我的代码:
for h = 1:numel(CSVfiles) % h is number of CSV files in the coresponding folder
delimiter = '\t';
formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
fileID = fopen(CSVfiles(h,1).name,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'ReturnOnError', false);
fclose(fileID);
for i=1:49
C(1,i)= dataArray(1,i);
end
C =cellfun(@str2double,C,'un',0);
VarName1 = cell2mat(C(:,1)); % for this column it works fine
VarName1(isnan(VarName1)) = 0 ;
VarName2 = cell2mat(C(:,2)); % for this column it replaces all values with zero!
VarName2(isnan(VarName2)) = 0 ;
end
您的代码行'C = cellfun(@ str2double,C,'un',0);'试图将每个读取的字符串转换为双精度数字。尝试转换日期字符串时失败。您可以使用该列的函数'datenum'。在使用textscan时,您也可以在'formatSpec'中使用'%f',这样您就可以直接读取数字。如果您不包含正在阅读的csv行示例,则无法给出正确的示例代码。 – Hoki