在Matlab中导入和解析.csv文件

时间:2014-04-12 13:16:09

标签: matlab nan

我有一个包含许多.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

1 个答案:

答案 0 :(得分:0)

据我了解你的问题,第二列是日期和时间,而其他是标量数值,对吗?

尝试使用str2double解析日期/时间字符串可能会导致问题。请尝试在该列上使用datenum(您需要指定日期/时间格式类型,请参阅datenum的文档。)