필터 지우기
필터 지우기

how do i change a variable name from workspace

조회 수: 99 (최근 30일)
Tossawon Ngamnet
Tossawon Ngamnet 2018년 7월 24일
편집: Tossawon Ngamnet 2018년 7월 25일
i have a sequence of .mat files. When i load the mat files into workspace, the variable names are composed of sing or double underscore such as 'IR0004__, IR 10001_'. Thus, i would like to change these variables to be only number. How can i delete the underscore?
Please suggest Thank you
  댓글 수: 4
Stephen23
Stephen23 2018년 7월 25일
편집: Stephen23 2018년 7월 25일
As I wrote in my comment, to load the data into one non-scalar array all variables in the .mat files must have exactly the same variables. This appears to not be the case with your .mat files, so you cannot use this method. If the variable names were exactly the same (as they should be) then you can simply do this:
for k = 1:N
S(k) = load(...)
end
As noted, this only works if the variable names are the same! Instead, you could use a cell array:
C = cell(1,N);
for k = 1:N
S = load(...);
C(1) = struct2cell(S);
end
Note that rather than this
['IR',num2str(fidx,'%04d'), '.mat']
you should use sprintf:
sprintf('IR%04d.mat',fidx)
Tossawon Ngamnet
Tossawon Ngamnet 2018년 7월 25일
편집: Tossawon Ngamnet 2018년 7월 25일
Dear cobeldick, I used this code from your suggestion
files = dir('*.mat'); cell(1,numel(files)); for fidx = 1:numel(files) S = load(sprintf('IRFrame%04d.mat',fidx)); C(1) = struct2cell(S); end

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

채택된 답변

KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 7월 24일
new_var_name=old_var_name;
clear('old_var_name');
  댓글 수: 4
KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 7월 24일
편집: KALYAN ACHARJYA 2018년 7월 24일
Please check the answer in this link , it will get the idea.
Stephen23
Stephen23 2018년 7월 24일
편집: Stephen23 2018년 7월 24일
"For example, using a complete code to rename all the files in my workspace"
Note that files are not in any MATLAB workspace, files are saved on your harddrive. Variables are in MATLAB workspace. Basic concepts, such as what variables are, are explained in the introductory tutorials:

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

추가 답변 (1개)

Giridharan Kumaravelu
Giridharan Kumaravelu 2018년 7월 24일
편집: Giridharan Kumaravelu 2018년 7월 24일
getname = @(x) inputname(1);
IR0004__ = 10;
str = getname(IR0004__);
newstr = erase(str,'_');
eval([newstr '=' str ';']);
clear(str);
This could help you rename one variable. But if you are looking to rename the variables containing only numbers in the name, that will not be valid variable name in any programming language.
Hope this helps!
  댓글 수: 4
Tossawon Ngamnet
Tossawon Ngamnet 2018년 7월 24일
편집: Stephen23 2018년 7월 24일
This code below was composing both uploading and converting mat to tif by using command line:
output_folder = 'D:\iSkysoft iMedia Converter Deluxe\Downloaded';
files = dir('*.MAT');
for fidx = 1:numel(files )
matcontent = load(files(fidx).name);
filenumber = regexp(files(fidx).name, '\d+', 'match', 'once');
imagename = sprintf('IR%s__', filenumber);
assert(isfield(matcontent, imagename), 'mat file %s does not contain image %s', files(fidx).name, imagename );
outputfilename = fullfile(output_folder, sprintf('test%s.tif', filenumber ));
imwrite(matcontent.(imagename), outputfilename );
end
It may help you to understand my problem because i cannot sent you a figure. the double underscore will be created when the mat files less than 10000 ( IRFrame0001__), but after 10000 the single underscore will be created (IRFrame10000_). For example, IR10007_,IR10006_,IR10007_,IR10008_,IR10009_,IR1000__,IR10010_,.. Sorting is not consecutive. Thus, i cannot use for loop to initial the variable names correctly.
Stephen23
Stephen23 2018년 7월 24일
편집: Stephen23 2018년 7월 24일
"Sorting is not consecutive."
You can easily sort the filenames by downloading my FEX submission natsortfiles:
"Thus, i cannot use for loop to initial the variable names correctly."
Accessing variable names in a loop is not recommended:

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

카테고리

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

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by