首页 > 解决方案 > 使用文件中的名称初始化变量

问题描述

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

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

输入.txt

a= 1
b= 2
c= 3

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

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

因此,名称将是一个 3x1 元胞数组,其中包含条目a=b=依此类推,而值将是一个传统3x1的双精度数组。

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

我不知道该怎么做...

谢谢!

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

Rcirc1= 30.0
SaveStride= 1000

标签: matlab

解决方案


您可以使用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})

推荐阅读