我有一个包含许多.csv文件的文件夹。在每个.csv文件的第一行中,有49个参数名称,在所有其他行中,这些参数有49个值。我需要读取每个文件并分离参数及其相应的值。如果一个值为空,我需要放一个NaN
然后归零而不是那个。我编写的代码适用于除第二列(第二个参数)之外的所有参数,其值为日期和时间,我的代码为此参数的所有值设置了NaN
。
这是我的代码:
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
答案 0 :(得分:0)
据我了解你的问题,第二列是日期和时间,而其他是标量数值,对吗?
尝试使用str2double
解析日期/时间字符串可能会导致问题。请尝试在该列上使用datenum
(您需要指定日期/时间格式类型,请参阅datenum
的文档。)