我有大量要处理的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
答案 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_directory
或filepath = ...
中删除?
答案 1 :(得分:0)
以下是另一种如何以矢量化方式设置格式字符串的方法:
fcell = repmat({'%*s '},1,n_columns);
fcell(wanted_columns) = {'%s '};
formatstr = [fcell{:}];
注意format
是MATLAB中的内置函数,最好不要用于变量名。