1

我有大量的 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
4

2 回答 2

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'应该删除 indata_directory或 in filepath = ...

于 2013-02-26T01:47:17.610 回答
0

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

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

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

于 2013-02-26T03:57:29.630 回答