3

次のコードを使用して、ベースワークスペースに変数を追加しました。

function data_startup()
bdclose all;
data=load(fullfile('B', 'C', 'data.mat')); 
file_variables=fieldnames(data);% get the field names as cell array
for ii=1:length(file_variables)
     assignin('base', file_variables{ii}, data.(file_variables{ii}));
end

今、私はベースワークスペースから変数をクリアしたいと思います、私は試しました:

evalin('base','clear file_variables');

しかし、これは機能していません:(

4

3 に答える 3

4

file_variablesおそらく存在しないname の変数をクリアしようとしています。あなたが望むものは:

evalin('base',['clear' sprintf(' %s',file_variables{:})]);

何が起こっているのかを理解したい場合: 関数でこの行を実行してデバッグし、次の結果を調べます。

['clear' sprintf(' %s',file_variables{:})]

によって実行されるコマンドになりますevalin

より詳しい情報:

[a b c]文字列自体が配列であるため、a、 、bおよびの文字列を連結します。セル配列をカンマ区切りのリストとして返します。これは に入力されます。詳細については、こちらを参照してください。c1xN
{:}sprintf

于 2012-11-09T15:04:15.023 に答える
1

上記は機能しません。何故かはわからない。関数はヒントを与えません。

しかし、ここにうまくいく解決策があります:

clear_names = fieldnames(Data.(itv{i}));   %Get fieldnames to be deleted
feval(@clear,clear_names{:})

変数clear_namesは文字列のセルです

グルス

于 2013-07-08T09:44:01.043 に答える
1

To clear all base variables close all matlab windows and clear command window.

I called it wipe.m

function wipe
clc;
bdclose all;
close all;
imtool close all;
evalin('base','clear all');

My very first contribution to stackoverflow

Doogie

于 2013-07-24T10:13:54.580 に答える