对于我写的实验报告,我需要分析大约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。
答案 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)
的结构。
然后在另一个函数中,您可以循环遍历所有文件,并将这些结构连接成一个数组。