0

我有多个(比如 N 个).txt 文件,由矩阵形式的数字 csv 数据组成。我想将这些数据文件中的每一个导入一个 (1 x N) 单元阵列,同时保留原始矩阵形式。如果原始数据很小,比如 3x3,那么 textscan 会以下列方式完成这项工作:

fileId = fopen('data1.txt');
A{1} = textscan(fileID, '%d %d %d', 'delimiter',',','CollectOutput',1);

(这将是函数的一部分。)但是如果我的 .txt 文件有 100 列数据怎么办?我可以在 formatSpec 中写 '%d' 100 次,但一定有更好的方法吗?

这似乎是一个简单的问题,但我对 Matlab 很陌生,不知道如何进行。任何建议将不胜感激,谢谢!!

4

1 回答 1

0

对于每个文本文件中具有一致数据的这种情况,您可以使用importdata而不必担心格式说明符。在此基础上讨论两种方法。

方法一

filenames = {'data1.txt' 'data2.txt' 'data3.txt'}; %// cell array of filenames
A = cell(1,numel(filenames)); %// Pre-allocation
for k = 1:numel(filenames)
    imported_data = importdata(char(filenames(k)));
    formatted_data = cellfun(@str2num, imported_data, 'uni', 0);
    A{k} = vertcat(formatted_data{:})
end

方法二

假设这些文本文件是当前工作目录中唯一的 .txt 文件,您可以直接获取文件名并使用它们将数据从它们存储到元胞数组中,如下所示 -

files = dir('*.txt');
A = cell(1,numel(files)); %// Pre-allocation
for k = 1:numel(files)
    imported_data = importdata(files(k).name);
    formatted_data = cellfun(@str2num, imported_data, 'uni', 0)
    A{k} = vertcat(formatted_data{:})
end
于 2014-06-21T04:26:07.347 回答