MATLAB Answers

0

Help with "find" (possibly inside of "eval"?)

Hi everyone:
Here is my issue...
I am inputting numerous text files inside of a FOR loop in order to pull two particular columns out, one with all characters and one with numbers (double). The code that I have so far, copied below, works as desired. Note that I set "numsvns" as only one entry for debugging.
numsvns = [61]; %only one number for debugging purposes
home_path = path;
for i = 1:length(numsvns)
% Set the current SVN number as an integer
svn1 = numsvns(i);
% Change the path to the folder of the current SVN
% % Convert the integer SVN to a string
svn = int2str(svn1);
% % Append the SVN to the folder needed to open
directory = strcat('output/sv',svn);
% % Open the folder for the current SVN
path(home_path,directory)
% Open the file and turn the data into a cell array
fid = fopen('groundVisibilityEvents.txt');
eval(['gve' svn ' = textscan(fid,''%s %s %f %f %s %s %s %f'');'])
% Pull out the data of interest (site (col. 1) and duration (col. 8))
eval(['site' svn ' = gve' svn '{1};'])
eval(['duration' svn ' = gve' svn '{8};'])
end
This creates two variables of importance, one called "site61" with ASCII characters and one called "duration61" with the double times. Of course, the variables have the 61 appendix since I set "numsvns" = 61 alone.
My next step is to search through "'duration' svn" (in this case, "duration61") in order to find the indices of zero terms. The following works great, as expected:
index = find(duration61==0);
However, I cannot figure out how to generalize this inside of my FOR loop. The following commands don't work, because the "find" function interprets the "duration61" as a character string rather than array:
index = find(['duration' svn]==0);
or, eval(find(['duration' svn]==0));
or, eval(find(['duration' str2num(svn)]==0));
or, abc='duration61'; find(abc==0);
etc.
Is there a way to turn a string into a variable? I thought that "eval" should have done that, but no luck. Otherwise, how do I generalize the "find" command to work with a generic "duration##", where the ## is specified in the loop?
Thank you,
Jeff

  1 Comment

Have a look at http://www.mathworks.com/matlabcentral/answers/7885-tutorial-how-to-format-your-question.

Sign in to comment.

2 Answers

Answer by Andrew Newell
on 20 Jul 2011
 Accepted Answer

Read this FAQ.

  0 Comments

Sign in to comment.


Answer by Jan
on 20 Jul 2011

Do not insert the index in the name of the variable. Better use and index as index: "duration{61}" is more powerful and avoids the ugly EVAL stuff.

  0 Comments

Sign in to comment.