将所有变量值连同它们的名称一起保存在 matlab 的工作区中
Posted
技术标签:
【中文标题】将所有变量值连同它们的名称一起保存在 matlab 的工作区中【英文标题】:saving all variable values in matlab's workspace together with their names 【发布时间】:2013-05-14 23:16:38 【问题描述】:我想保存以某种方式将我工作区中的所有变量连同它们的名称一起打印到一个文件中:
%<*firstVariableName>firstVariableValue(s)%</firstVariableName>
%<*secondVariableName>secondVariableValue(s)%</secondVariableName>
我想将每个变量保存在新行上。我已经尝试过功能 who,但我似乎无法让它工作。
我也无法将其保存为 UTF-8,是否有可以更改的简单编码设置?
【问题讨论】:
多维变量呢?也许是 2D 或 3D 矩阵? @RoneyMichael 他们可以被忽略。我只是要使用标量,所以矩阵可能会被排除在外或被奇怪地格式化。 那么一维向量呢? @RoneyMichael 我只会使用标量,但一维向量可以表示为'element1 element2 element3 ...' 【参考方案1】:who
函数将保存变量的名称,但不保存变量中的数据。如果您想保存实际变量,您应该使用save
函数,并将其保存到*.mat 文件中。
如果您想获取以某种方式格式化的变量名称列表,我建议您这样做:
varlist = who(variables);
varlist
是一个元胞数组。然后,您可以fopen
开始写入文件,使用fwrite
遍历元胞数组,完成后使用fclose
它。顺便说一句,当你迭代时,你应该使用varlistx
,它将返回字符串(而varlist(x)
将返回单元格)。
希望这会有所帮助。 :)
【讨论】:
【参考方案2】:这可能不适用于所有情况,但它适用于数字输入。可以根据您的用例进行适当修改:
%Clears current workspace.
clear;
%Sample data.
a = 1;
b = [2 3];
new_var = [4;5];
%Relevant code.
my_var_list = who;
fid = fopen('my_var_list.txt','w');
for my_var_ii=1:numel(my_var_list)
my_temp_var = eval(my_var_listmy_var_ii);
my_temp_str = cellstr(strcat(sprintf('%%<*%s>', my_var_listmy_var_ii), num2str(my_temp_var(:)'), sprintf('%%</%s>', my_var_listmy_var_ii)));
fprintf(fid, '%s\n', my_temp_str:);
end
fclose(fid);
clear fid;
clear my_temp_var;
clear my_var_ii;
clear my_var_list;
clear my_temp_str;
现在我的“my_var_list.txt”将包含:
%<*a>1%</a>
%<*b>2 3%</b>
%<*new_var>4 5%</new_var>
【讨论】:
非常好!为了使其更健壮并忽略“垃圾”,我建议添加一个简单的检查以查看某物是否为标量,否则请使用下一个变量。以上是关于将所有变量值连同它们的名称一起保存在 matlab 的工作区中的主要内容,如果未能解决你的问题,请参考以下文章