Matlab 如何使用textscan导入具有选定列的多个csv文件?

Matlab 如何使用textscan导入具有选定列的多个csv文件?,matlab,csv,textscan,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 (filepat

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

我想你应该检查一下文件是否被正确打开。错误消息似乎表明情况并非如此。如果不是,请检查
文件路径是否正确

fid = fopen (filepath, 'rt');
if fid == -1
    error('Failed to open file');
end
如果在这里抛出错误,您就知道
'fopen'
有问题

当然,我不知道您的计算机上有哪些文件,但我假设文件名中的
“…”
不在实际的matlab文件中,只是在您的问题中。
但是可能是您重复了单词
'data'
,而实际的文件名只包含
'data'
一次吗?您现在编写的代码将生成类似于
“'C:\Users\…\datadata\u 1\u output.csv'
”的文件名。也许应该在
数据\u目录
文件路径=…

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

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

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

您得到的错误是什么?@ThijsW错误是:???使用==>文本扫描无效文件标识符时出错。使用fopen生成有效的文件标识符。错误==>数据导入失败,16个数据=textscan(fid,格式,'分隔符',','标题行',1);嗨,这很有帮助。我改变了所有可能引起混乱的重复单词,现在可以了。非常感谢--Jackiec我可以再问一个关于如何继续将数据集作为一个文件输出的问题吗?谢谢你的帮助。以前没有看到你的评论。请走开。也许最好在这个网站上创建一个新的问题,保持事物的整洁。