读取多个文本文件并将其作为列导入

时间:2014-04-14 04:04:16

标签: matlab

我有一个代码,但我不知道如何让每个文本文件作为矩阵中的不同列放置。

例如,我有5个文本文件,所有文件只有一列。如何将每个列放入单个矩阵中?我写的代码如下,但它不起作用:

for k = 1:5
 textFilename = ['file' num2str(k) '.txt'];
 fid = fopen(textFilename, 'rt');
 textData = fread(fid);
 fclose(fid);
end

1 个答案:

答案 0 :(得分:1)

我假设从所有文本文件读入的数据长度相同。如果是这种情况,那么您所要做的就是创建一个空矩阵,然后逐列连接结果。你只需要添加两行。

 % Store the text data here
 textDataMatrix = [];
 for k = 1:5
  textFilename = ['file' num2str(k) '.txt'];
  fid = fopen(textFilename, 'rt');
  textData = fread(fid);
  % Concatenate text file data by column
  textDataMatrix = [textDataMatrix textData];
  fclose(fid);
 end

在此脚本的末尾,textDataMatrix将包含您想要的文本数据,并根据需要放置在不同的列中。


NB:创建一个空矩阵通常很糟糕,因为它被认为很慢,所以填充你的项目。如果您在运行此代码之前确实知道单个数据文件中有多少字符/字节/数字,这将有所帮助。执行此操作时,可以在运行for循环之前预先分配所需的内存量。在填充矩阵之前创建适量的空间在MATLAB中更有效,而不是连接元素。如果您想这样做,假设您在数据文件中拥有的元素数量称为numElements。您可以通过以下方式重写我上面编写的代码:

 % Store the text data here
 textDataMatrix = zeros(numElements, 5);
 for k = 1:5
  textFilename = ['file' num2str(k) '.txt'];
  fid = fopen(textFilename, 'rt');
  textData = fread(fid);
  % Place the k'th text data in the k'th column
  textDataMatrix(:,k) = textData;
  fclose(fid);
 end

但是,如果特定文本文件中没有那么多元素,那么上面代码的第一个版本就可以了。