How do I rename a variable, as it changes in a Loop

조회 수: 5 (최근 30일)
fadams18
fadams18 2018년 10월 19일
편집: Stephen23 2018년 10월 19일
I have .mat file. and first I load my variables (Data_1,Data_2....Data_60) using
for i=1:60
load(['matfiles/Data_',num2str(i),'.mat']);
end
I want to use a loop to write to a spreadsheet instead of writing this 60 times. so I do this
for i=1:60
xlwrite('saved_file.xls',Data_1, sheetName,'B3') // Data_1 is one of the variable loaded above.Needs to change to Data_2 and so on.
end
now the question is I want to dynamically change the name in Data_1 every iteration using the loaded files. How can I do this.
  댓글 수: 1
Stephen23
Stephen23 2018년 10월 19일
"I want to dynamically change the name in Data_1 every iteration using the loaded files. How can I do this."
Do NOT do this! Magically accessing/defining variable names is one way that beginners force themselves into writing slow, complex, buggy code. Read this to know why:
A much simpler and more efficient solution is to load the data into an output variable (which you should always be doing anyway, and then use struct2cell. Then your task is easy.

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

채택된 답변

Stephen23
Stephen23 2018년 10월 19일
편집: Stephen23 2018년 10월 19일
This is easy, as long as there is only one variable loaded from each .mat file:
for k = 1:60
F = sprintf('Data%d.mat',k);
P = fullfile('matfiles',F);
S = load(F);
C = struct2cell(S);
N = sprintf('sheet%d',k);
xlswrite('saved_file.xls',C{1},N)
end
  댓글 수: 3
Stephen23
Stephen23 2018년 10월 19일
편집: Stephen23 2018년 10월 19일
"is there a way to make the row update as well?"
Of course, just use sprintf to specify the address:
pos = sprintf('B%d',1+k);
xlwrite('saved_file.xls',C{1},sheetname,pos)
fadams18
fadams18 2018년 10월 19일

Thank man! remind me to buy u chocolate xD

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

추가 답변 (1개)

madhan ravi
madhan ravi 2018년 10월 19일

카테고리

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

제품

Community Treasure Hunt

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

Start Hunting!

Translated by