Effacer les filtres
Effacer les filtres

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

8 vues (au cours des 30 derniers jours)
Jeffrey McCoy
Jeffrey McCoy le 20 Juil 2011
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 commentaire
Andrew Newell
Andrew Newell le 20 Juil 2011
Have a look at http://www.mathworks.com/matlabcentral/answers/7885-tutorial-how-to-format-your-question.

Connectez-vous pour commenter.

Réponse acceptée

Andrew Newell
Andrew Newell le 20 Juil 2011
Read this FAQ.

Plus de réponses (1)

Jan
Jan le 20 Juil 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.

Catégories

En savoir plus sur Source Control Integration dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by