将所有变量值与其名称一起保存在matlab工作空间中

时间:2013-05-14 23:16:39

标签: matlab character-encoding save

我想保存以某种方式将我工作区中的所有变量及其名称一起打印到文件中:

%<*firstVariableName>firstVariableValue(s)%</firstVariableName>
%<*secondVariableName>secondVariableValue(s)%</secondVariableName>

我想将每个变量保存在新行上。我已经尝试过这个功能,但我似乎无法让它发挥作用。

我还有将其保存为UTF-8的问题,是否有可以更改的简单编码设置?

2 个答案:

答案 0 :(得分:1)

who函数将保存变量的名称,但不保存变量中的数据。如果您想保存实际变量,则应使用save函数,并将其保存为* .mat文件。

如果您想获取以某种方式格式化的变量名称列表,我建议您这样做:

varlist = who(variables);

varlist是一个单元格数组。然后,您可以fopen开始写入文件,使用fwrite遍历单元格数组,并在完成后使用fclose。顺便说一句,当你迭代时,你应该使用varlist{x},它将返回字符串(而varlist(x)将返回单元格。)

希望这会有所帮助。 :)

答案 1 :(得分:1)

这可能不适用于所有情况,但它适用于数字输入。它可以根据您的使用情况进行适当修改:

%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_list{my_var_ii});
    my_temp_str = cellstr(strcat(sprintf('%%<*%s>', my_var_list{my_var_ii}), num2str(my_temp_var(:)'), sprintf('%%</%s>', my_var_list{my_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>