Filter löschen
Filter löschen

Storing a vector in a loop each time with a different name

2 Ansichten (letzte 30 Tage)
for k = 1:10
FileName1 = ['EqvStr_',num2str(k),'.csv'];
filename1 =fullfile('E:\ANSYS_FILES\BigKB', FileName1);
A = xlsread(filename1,'A2:E1000');
vectorname = ['a',num2str(k)];
vectorname = A(:,1);
end
disp(a1)
disp(a2)
disp(a3)
disp(a4)
disp(a5)
disp(a6)
disp(a7)
disp(a8)
disp(a9)
disp(a10)
So I am running the above code and MATLAB gives me an error message saying "Undefined function or variable 'a8'". It is weird because it IS showing me the results if I comment out the a8, a9, and a10 lines from the code but gives me the error message if not. There are a 1090 files in the folder in that name format and I am just testing the code with the first 10 but it is showing me this error. Can anyone please help me understand what the problem here is?
  2 Kommentare
Stephen23
Stephen23 am 10 Aug. 2018
"Can anyone please help me understand what the problem here is?"
Bad code design. Much better code design would simply use simpler, more efficient indexing with a cell array, exactly as the MATLAB documentation shows:
What you are doing will force you into writing slow, buggy, complex code which is harder to debug:
Siddhant Chandra
Siddhant Chandra am 10 Aug. 2018
Thanks Stephen! I will improve it.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

James Tursa
James Tursa am 10 Aug. 2018
Bearbeitet: James Tursa am 10 Aug. 2018
This is not the best way to do this in MATLAB. There are many, many posts on this site explaining why. Instead, you should use cell arrays. E.g.,
A{k} = xlsread(filename1,'A2:E1000');
Then downstream in your code simply use A{k} instead of the a1, a2, etc that you are currently using. See this link:
  6 Kommentare
Stephen23
Stephen23 am 10 Aug. 2018
Bearbeitet: Stephen23 am 10 Aug. 2018
@Siddhant Chandra: try it and find out: assuming that C does not exist, try this:
C{4} = 1
What does it create?
But your question is actually a good one, because to make the code clear, efficient, and to prevent interference from existing variables you should preallocate the cell array before the loop, like this:
N = 10;
C = cell(1,N); % preallocate!
for k = 1:N
...
C{k} = xlsread(...);
end
Then it is unambiguous what size C has, and what the indexing refers to. Note that the MATLAB documentation clearly shows the cell array being preallocated before the loop:
You can read about array preallocation here:
Using clear is not recommended for this, it is better to preallocate.
Siddhant Chandra
Siddhant Chandra am 10 Aug. 2018
Got it! Thank you so much for your help Stephen! Thank you for the knowledge

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Entering Commands finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by