在MATLAB中导入多个文件

时间:2012-11-11 06:02:08

标签: matlab

对于我写的实验报告,我需要分析大约90个数据集。不幸的是,它们都是文本文件,其名称如“小单晶硅曲线第1部分106w_m ^ 2”,没有文件扩展名。我把它们都放在一个文件夹里。我想将每个变量输入到它自己的变量中,并使用它的原始名称进行操作。这需要用下划线替换文件名中的空格并删除克拉。我想创建一个.m文件来为我做这个。到目前为止,我有这个:

function [t]=makedata()
%makes data 
x=dir;
i=0;
for l=3:length(x)
    i=i+1;
    y=x(l).name;
    t=y(1:end-5);
    t=regexprep(t,' ','_');
    t=importdata(y);
end
end

显然这段代码不起作用。我知道我的MATLAB技能很弱,所以任何帮助都会受到赞赏。到目前为止,我的代码使用dir命令收集目录中所有内容的数据,然后遍历该数据,将名称更改为可输出的内容,然后导入数据。

我该如何使这项工作?我不知道如何使用不同的名称输出变量。我研究过使用eval命令但不知道如何成功实现它,加上FAQ表示要避免使用该方法。

感谢您的帮助。我还没能在网上找到一个solutoin。

2 个答案:

答案 0 :(得分:1)

为什么不简单地获取文件列表并从ONE列表中处理它们?为什么你必须经历为每个文件创建一个变量名的所有麻烦?

使用dir()可以获得很好的结构数组。每个结构都包含文件的信息。

 list_of_files=dir([fullfile(pwd) '\\*.txt']);
 list_of_files(1).name
 list_of_files(2).name
 etc...

如果文件没有扩展名,并且正如您所说,它们都在同一目录中,那么只需编写

  list_of_files=dir(fullfile(pwd));

我在上面使用pwd目录。在您的情况下使用正确的目录名称,可以是文件系统上的任何位置。

现在您可以使用这个名为list_of_files的ONE变量来使用其名称打开每个文件,并读取文件中的数据并对文件执行任何其他处理。

为每个文件名创建一个变量的方法是解决这个简单问题的错误方法。

答案 1 :(得分:0)

摆脱那些不受支持的字符的一种方法是genvarname功能。 就个人而言,我会创建一个包含所有相关信息的结构。您可以将这样的结构放入数组中,然后处理数组的每个元素。

这样你就不必从文件名中找出变量名称,而且处理起来要容易得多(否则你需要为每个下一步要处理的变量名列表,或者复制代码为每个单独的变量/数据集,这是非常容易出错的。)

所以我写了一个函数function data = importSingleDataFile(filename),它读取文件并返回类似data = struct('filename', filename, 'data', yourLoadedData)的结构。 然后在另一个函数中,您可以循环遍历所有文件,并将这些结构连接成一个数组。