用文件名初始化变量

时间:2018-08-11 15:56:26

标签: matlab

我有一个txt文件,其中包含由外部程序创建的一堆参数。

让我们考虑一个简单的例子:

input.txt

a= 1
b= 2
c= 3

我可以在matlab 2018a中读取名称和值:

[names, values]=textread('input.txt','%s%f');

因此,名称将是一个3x1单元格数组,其中包含条目a=b=等,而值将是常规的3x1双精度数组。

在我当前的工作空间中,我想初始化获得的变量(使用相应的名称)并将它们设置为等于相应的值。 在上面的示例中,应该在当前工作空间中创建变量a=1b=2c=3

我不知道该怎么做...

谢谢!

编辑:在我的实际示例中,变量名称可以包含许多字符/数字(按照标准惯例,变量名称始终以字母开头,而不是数字开头),例如

Rcirc1= 30.0
SaveStride= 1000

2 个答案:

答案 0 :(得分:2)

您可以结合使用regexpassignin来获得所需的输出:

%Read data.
data = fileread('input.txt')

%Extract variable name and value in named groups.
s = regexp(data,'(?<var>[A-Z]\w+)\D+(?<val>\d+(?:\.\d+)?)','names');

%Loop over struct s contents to create variables in workspace.
cellfun(@(x,y) assignin('base',x,str2double(y)),{s.var},{s.val})

答案 1 :(得分:2)

文本文件中的分配可以通过MATLAB直接评估。您无需提取它们。为了使每行打印的文本静音,您可以使用evalc

evalc(fileread('input.txt'));