基于文件名的变量

时间:2013-11-21 22:27:16

标签: matlab variables filenames

我正在尝试导入多个数据文件,分别称为1min1,1min2,1min3,1min4等。它们将进行一些处理(某些列的减法,某些值的乘法等),每个文件的最终结果是一列。我希望matlab将每个列保存在一个等于文件名的变量中。 因此,在多个文件1min1,1min2,1min3,1min4等中,输出几个具有相同名称的变量,但只有一个列/变量。

我尝试使用它:

i=20; %nr of files
name='1min';   %basic filename
norm=8;      %normalisation factor

for k=1:i
    fileName = strcat(name,num2str(k));
    A= load(fileName);
    [thisshouldbethesamefilename]=(A(:,7)-A(:,6))/A(1,12)*norm;
end

最后我想把它作为一个函数,我只输入文件名,文件的nr和规范化因子,它给我生成的列作为单独的变量。我知道我可以将所有列放在同一个文件中(例如使用B(:,1),B(:,2)等)但我想查看原始文件名,以便知道数据来自何处。 我尝试过genvarname,eval和类似的东西,但没有成功。可能很简单,感谢帮助!

2 个答案:

答案 0 :(得分:2)

使用eval应该可以正常工作。试试这个:

temp =(A(:,7)-A(:,6))/A(1,12)*norm;
eval([ 'file_' name ' = temp;'])

请注意,这将在所有变量名称之前添加“file_”。这对您的任务很重要,因为您的文件名以数字开头(“1分钟”),它将不会被识别为有效的MATLAB变量。换句话说,如果你刚刚写完

1min = 12

...... MATLAB会抛出错误。

答案 1 :(得分:1)

我建议使用map container

i=20; %nr of files
name='1min';   %basic filename
norm=8;      %normalisation factor
map = containers.Map()
for k=1:i
    fileName = strcat(name,num2str(k));
    A= load(fileName);
    map(fileName)=(A(:,7)-A(:,6))/A(1,12)*norm;
end

可以通过

读取数据
map(fileName)