【问题标题】:Reading multiple .dat files into MatLab将多个 .dat 文件读入 MatLab
【发布时间】:2015-09-26 08:26:24
【问题描述】:

我很难将一堆 .dat 文件读入 MatLab。我试图用谷歌搜索这个问题,但一小时后我仍然无法让我的代码工作。我总共有 141 个 .dat 文件。每个文件包含三行标题信息(我不想包含),然后是一堆行,每行包含三列数字。我想将所有 .dat 文件中的行合并到一个包含所有行和三列的大矩阵中(因为所有 .dat 文件中的每一行都包含三个数字)。这是我尝试使用的代码:

d = dir('C:\Users\Kristian\Documents\MATLAB\polygoner1\');
out = [];
N_files = numel(d);
for i = 3:N_files
    fid = fopen(d(i).name,'r');
    data = textscan(fid,'%f%f%f','HeaderLines',3);
    out = [out; data];
end

但是,当我尝试运行代码时,我收到了错误消息

??? Error using ==> textscan
Invalid file identifier.  Use fopen to generate a valid file identifier.

Error in ==> readpoly at 6
    data = textscan(fid,'%f%f%f','HeaderLines',3);

如果有人知道我如何让它工作,那么我将非常感激!

【问题讨论】:

  • 如果您阅读了 fopen 的文档,您会发现如果文件不在当前 MATLAB 目录中,您对 fopen 的第一个输入必须是完整路径或相对路径。将fullfile 与您的路径名和文件名一起使用。
  • 谢谢,我去看看!
  • 这不是问题的一部分,但您应该确保在完成后关闭文件,方法是将语句fclose(fid); 作为for 循环的最后一行。
  • 非常感谢!我会将其添加到代码中。我在大学课程中做过很多 MatLab,但是现在当我需要在工作中使用它时,在各种软件之间传输文件时会遇到所有这些挑战!那不是教的:)

标签: matlab file import


【解决方案1】:

问题是当你使用fopen时,你没有给出文件的完整路径

path = 'C:\Users\Kristian\Documents\MATLAB\polygoner1\'
d = dir(path);

....

%as @craigim advised it, otherwise you can use strcat
my_file = fullfile(path, {d.name}) 
for i = 3:N_files
    fid = fopen(my_file{i},'r');

    ....

    fclose(fid);
end

【讨论】:

  • 最好使用fullfile 连接目录和文件名,因为它具有内部检查以确保文件分隔符存在并且对于特定文件系统是正确的。
  • 非常感谢! MatLab 现在运行程序没有错误!真的很感激!
  • @craigim : 不知道这个特殊的功能,在 strcat 上使用它看起来更明智!编辑了我的问题
  • 感谢您的更新。我已经相应地更改了我的代码。
  • 最后一个建议。 fullfile 将对列表进行操作,并且可以退出循环。 my_file = fullfile(path, {d.name}); ... fid = fopen(my_file{i}, 'r');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2014-09-06
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多