2

对于我正在撰写的实验室报告,我需要分析大约 90 个数据集。不幸的是,它们都是文本文件,名称为“small single crystal si iv curve part 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 命令进行了研究,但不知道如何成功实现它,加上常见问题解答说要避免这种方法。

感谢您的任何帮助。我还没有在网上找到解决这个问题的方法。

4

2 回答 2

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上面用于目录的地方。在您的情况下使用正确的目录名称,它可以是文件系统上的任何位置。

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

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

于 2012-11-11T06:18:22.997 回答
0

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

这样,您实际上不必从文件名中找出变量名称,并且处理起来要容易得多(否则,您需要为下一步处理的变量名称列表,或者为每个单独的变量复制代码/data 集,这很容易出错)。

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

于 2012-11-11T06:23:48.220 回答