필터 지우기
필터 지우기

how to save workspace variables with the same name they have in work space

조회 수: 18 (최근 30일)
matar hedi
matar hedi 2022년 4월 11일
편집: Stephen23 2022년 4월 14일
i have lots of variables in the workspace and want to save those with the prefix "PSD", also I want them to have the same name they have now or even better without the "PSD" prefix.
i tried to use:
vars = work PSD*

답변 (2개)

mark li
mark li 2022년 4월 14일
Hello! There is a simple demo.
%%
%test data
clear;
PSD_a = 1;
PSD_b = 2;
PSD_c =2;
a = 1;
%%
str_set = [];
Save_name = '''a.mat'''; %the save file name
Var_name = who('PSD*');
for index = 1 : length(Var_name)
str = Var_name{index};
str_new = str(5:end); %the Value 5 may be changed properly
eval([str_new '=' str ';'])
str_set = [ str_set ',' '''' str_new ''''];
end
eval([ 'save(' Save_name str_set ')'])
%%
%clear data
clear_var = ['clear(''' str_set(3:end-1) ''')' ];
eval(clear_var)

Stephen23
Stephen23 2022년 4월 14일
편집: Stephen23 2022년 4월 14일
A much simpler approach ist use SAVE's regular expression syntax:
save('mydata.mat', '-regexp','^PSD')
There is no point in making your code more complex than that.
Renaming would be best done by LOADing and changing the fieldnames, for example:
S = load('mydata.mat')
and then use dynamic fieldnames and RMFIELD.
Note that filtering variables by their names implies that you have forced meta-data into the variable names, which is generally very poor data design which will make acessing and processing your data slow, complex, and inefficient.
  댓글 수: 1
Stephen23
Stephen23 2022년 4월 14일
편집: Stephen23 2022년 4월 14일
Simple demo:
PSD1 = 11;
PSD2 = 22;
notPSD = 33;
save('mydata.mat', '-regexp','^PSD')
whos -file mydata
Name Size Bytes Class Attributes PSD1 1x1 8 double PSD2 1x1 8 double

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 File Operations에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by