How do I find array elements that meet some condition with strcmp?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
I have a vector of image files. I would like to pull out only a subset of these files which meet a certain condition. The file names are numbers, and are organized (i.e., files 1100-1199 are one group, 1200-1299 another, etc.). I tried to use the find function, but since these are file names and not simply numbers, I don't think that will work. Should I use "strcmp"?. I'm not familiar with it. My code I have so far is below... Thanks! I'm working with Psychtoolbox.
close all;
clear all;
clc % clear command window
% Images
Images = {'1100.bmp';'1202.bmp';'1203.bmp';...}
% Shuffle images
Images=Shuffle(Images)
% Display matched image
MatchedImages=find(Images(Images<='1399' & Images>='1300'))
RandomMatchedImage = MatchedImages{ceil(rand(1)*length(MatchedImages))}
...
sca;
imagedata=imread(RandomMatchedImage);
win=Screen('OpenWindow',0);
black=BlackIndex(win);
Screen('FillRect', win, black);
TexturePointer=Screen('MakeTexture',win,imagedata);
clear imagedata;
Screen('DrawTexture',win,TexturePointer);
Screen('Flip',win);
WaitSecs(10);
sca;
0 commentaires
Réponse acceptée
Guillaume
le 6 Nov 2014
Unfortunately, matlab's strcmp is less functional than C's strcmp and can't really be used for the sort of comparison you want. You have several options though:
If all you want to do is group the filename by their hundred, you could just compare the first two digits of the filenames, with strncmp:
MatchedImage = Images(strncmp(Images, '13', 2)); %get all images that start with '13'
This won't work if you want something finer grained than thousand, hundred, decade, or unit. For that, you could use a regular expression and test if it match with isempty.
Finally, you could convert the numeric part of your strings into double and do the comparison based on that. You can use str2double but you need to make sure your strings are just numbers. For that a simple regex would suffice:
ImageNumbers = str2double(regexp(Images, '\d+', 'match', 'once'));
MatchedImages = Images(ImageNumbers <= 1399 & ImageNumbers >= 1300);
This latter option gives you the most flexibility.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Timing and presenting 2D and 3D stimuli 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!