如何使用textscan导入包含所选列的多个csv文件?

时间:2013-02-25 23:04:20

标签: matlab csv textscan

我有大量要处理的csv文件。我只想要每个文件中的选定列,然后加载某个文件夹中的所有文件,然后输出为一个组合文件。以下是运行错误的代码....有人可以帮我解决这个问题吗?

data_directory = 'C:\Users\...\data';
numfiles = 17;
for n = 1:numfiles
    filepath = [data_directory,'data_', num2str(n),'_output.csv'];
    fid = fopen (filepath, 'rt');
    wanted_columns= [2 3 4 5 10 11 12 13 14 15 16 17 35 36 41 42 44 45 59 61];
    format = [];
    columns = 109;
for i = 1 : columns;
    if any (i == wanted_columns)
        format = [format '%s'];
    else
        format = [format '%*s'];
    end
end
    data = textscan(fid, format, 'Delimiter',',','HeaderLines',1);
    fclose(fid);
end

2 个答案:

答案 0 :(得分:0)

我认为您应该检查文件是否正确打开。错误消息似乎表明情况并非如此。如果不是,请检查filepath是否正确。

fid = fopen (filepath, 'rt');
if fid == -1
    error('Failed to open file');
end

如果此处出现错误,您知道'fopen'存在问题。

当然我不知道你的计算机上有哪些文件,但我认为文件名中的'...'不在你的实际matlab文件中,只在你的SO问题上。 但是,您是否可以重复单词'data',而实际文件名只包含'data'一次?您现在的代码将生成''C:\Users\...\datadata_1_output.csv'等文件名。也许'data'应该在data_directoryfilepath = ...中删除?

答案 1 :(得分:0)

以下是另一种如何以矢量化方式设置格式字符串的方法:

fcell = repmat({'%*s '},1,n_columns);
fcell(wanted_columns) = {'%s '};
formatstr = [fcell{:}];

注意format是MATLAB中的内置函数,最好不要用于变量名。