concatenating string variable names and passing on values of a matrix in a for loop
34 views (last 30 days)
I have many files, for each file I create variable names with part of the filename (using for loop and counter the filecounter) and then, I pass on to them the values of a matrix (AWFR) I create for each iteration, using eval()
The problem is that I want to concatenate all these column - vector variables into one large column vector, without having to type the names manually all over again, after these are saved in the workspace.
I managed to create a matrix containing all the names of the variables (AWFRallthenames), but I couldn't pass on the values with eval([AWFRallthenames(filecounter,:),'=AWFR']).
Is there any other way and why the above does not work? I am attaching a part of the code if that helps!!
Any help appreciated! Thank you
% matrix allthenames keeps all the AWFR names (every hour,
%every .xdat file), in integer values
%and this converts the integer values to a string
%Now create the AWFR matrix. NO stimulation intervals included.
AWFR = zeros(nBins, 1);
index_ofeach_bin=find( (Ts>(n-1)*(Fs*60*BinSize)) & (Ts<=n*(Fs*60*BinSize)))
%now I pass on the values to the string name I have created before (AWFRname)
%now I pass on the values of the string name I have created before, and
%rests in a row of the AWFRallthenames matrix
Roberto on 8 May 2014
Creating variable names via EVAL function is highly NOT RECOMMENDED. Try to use a different philosophy... try this for example:
% create your 'myVar' structure with all contents to store:
for fCounter = 1 : totalFiles
myVar(fCounter).datehour = BasicName(end-12:end) ;
myVar(fCounter).onoma1 = 'AWFR' ;
myVar(fCounter).onoma2 = myVar(fCounter).datehour ;
myVar(fCounter).AWFRname = horzcat(myVar(fCounter).onoma1,myVar(fCounter).onoma2) ;
myVar(fCounter).AWFR = zeros(nBins, 1);
index_ofeach_bin = find( (Ts>(n-1)*(Fs*60*BinSize)) & (Ts<=n*(Fs*60*BinSize)));
myVar(fCounter).AWFR(n) = length(index_ofeach_bin);
% Process all elements
for i = 1 : numel(myVar)
disp(['AWFR name: ' myVar(i).AWFRname]);
% then you can save only one variable to workspace
In case you want to learn how to filter structures, to get just one element, have a good look in to this amazing video tutorial. Good luck!