Matlab 如何在循环中保存除一个变量外的所有变量?

Matlab 如何在循环中保存除一个变量外的所有变量?,matlab,save,eval,Matlab,Save,Eval,我试图保存所有变量,除了循环中的一个变量。但是一个错误,或者一个错误的文件扩展名,总是MATLAB返回给我的答案。 我错在哪里 for SESSION=1:3 for trial_number=1:10 eval(['save data_',num2str(SESSION),'_trial_',num2str(trial_number),'.mat'... ,'-regexp','^(?!(RESPONSE)$).

我试图保存所有变量,除了循环中的一个变量。但是一个错误,或者一个错误的文件扩展名,总是MATLAB返回给我的答案。 我错在哪里

for SESSION=1:3
    for trial_number=1:10
        eval(['save data_',num2str(SESSION),'_trial_',num2str(trial_number),'.mat'...
                            ,'-regexp','^(?!(RESPONSE)$). ']);
    end
end

您尝试执行的direct问题是,在连接字符串时,未能在文件名和
-regexp
参数之间放置空格(“”)

但是,我建议您利用的功能获取多个参数来清理并防止不必要的字符串连接:

save(filename, variablename)
其中,
filename
是指向*.mat文件的路径,
variablename
是表示工作区中要保存的变量的字符串

您还可以将
-regexp
标志值传递给
保存
函数。(以下示例假定正则表达式是正确的)

另一种方法是(如果您不喜欢regexp或匹配太难排除多个值),获取工作区中所有变量的列表,删除我不想保存的变量,并将所有其他变量名显式传递给
save
函数

variables = who;
toexclude = {'variable1', 'variable2'};
variables = variables(~ismember(variables, toexclude));
save(output_file, variables{:});

我建议不要使用
save filename
语法,而是使用
save(filename,variables)
语法,首先为文件名和变量创建两个变量。这增加了代码的可读性,并允许您在使用这两个参数之前打印它们,以检查它们是否真正包含您期望的内容。在我发布的示例中,我获得了一个扩展名错误的文件:data_1_trial_1.mat regexp^(?(RESPONSE)$)。它的格式是mat regexp^(?(RESPONSE)$)@kika,MATLAB如何知道扩展的结束位置?您拥有一个
[…]
中的所有内容。您应该遵循Daniel的建议。为了精确地说明我的评论,它应该类似于
save(filename,'-regexp',expression)
,其中filename和expression是您的变量。在第一次阅读时没有注意到您正在使用regexp。您忘记了“RESPONSE”的撇号,是吗?!正如@Daniel所说,您应该为filename/目录创建一个变量。例如,
saveDir=sprintf('data_%d_%d.mat',SESSION,Trial_number)
,然后您可以使用
disp(saveDir)
检查saveDir是否符合预期,然后使用
save(saveDir,'regexp',RESPONSE')太棒了。第二种方法是当我有多个变量要排除时唯一适用于我的方法(我不能使用clearvars,因为我的matlab版本早于2008a)。我尝试使用(XXX | YYY)和其他带有否定环视regex的组合,但没有任何运气。谢谢
variables = who;
toexclude = {'variable1', 'variable2'};
variables = variables(~ismember(variables, toexclude));
save(output_file, variables{:});