Switch Case where case is a word_anynumber

I am trying to make a switch case where the case is satisfied by the following:
word_anynumber (ie word_1 or word_2 etc)
what do i do to achieve this?
The issue is that i want the case to do the same thing for any case with word_#, but i don't want to create cases for each number because i have a variable number of numbers each time this script runs.
Any help would be greatly appreciated.
-Jonathan

 Accepted Answer

A regular expression might be useful for this type of task. Using the following as the test case:
a = cellstr([repmat('word_', 100, 1), num2str((0:99)', '%02d')]);
b = cellstr([repmat('Word_', 100, 1), num2str((0:99)', '%02d')]);
c = cellstr([repmat('xword_', 100, 1), num2str((0:99)', '%02d')]);
x = [a;b;c];
The following:
~cellfun(@isempty, regexp(x, 'word_[0-99]', 'matchcase'));
will return true for any x that is word_# and fail on case changes. How to build your case/switch around this is not clear (it seems like an if/elseif/else problem to me.

1 Comment

Thank you for your help. I ended up switching from a switch case to a if/elseif and used the regexp(x, 'word_[0-99]', 'matchcase') expression and it is working. This will be good for now, but i may revisit this later for speed reasons. Thank you all for your help.
-Jon

Sign in to comment.

More Answers (2)

Use strfind(), strcmp() or strmatch(). You may also consider use "if-else" rather than 'case-switch"
if strfind(StrVariable,'word_')

1 Comment

I think this will evaluate to true if StrVariable is of the form * word_*. It doesn't require word to be the first element, numbers to follow the underscore, or the numbers to be the final elements.

Sign in to comment.

If all of your cases are similar to what you describe, then you can use strtok like this.
a = 'word_4';
b = 'word_27';
c = 'byte_3';
d = 'bit_14';
switchStr = a;
switch strtok(switchStr, '_')
case 'word'
disp('word')
case 'byte'
disp('byte')
case 'bit'
disp('bit')
otherwise
disp('otherwise')
end
This displays 'word'. Try repeating this with switchStr set to b, c, and d.

6 Comments

the setup to this problem is that i am doing a switch on a string and there are a number of cases each corresponding to a certain string. One of the cases is that of word_# where number can be anything. Hence, i don't think that the strtok will work in its use here.
something like this:
Jonathan answered 11 minutes ago
If all of your cases are similar to what you describe, then you can use strtok like this.
a = 'apple';
b = 'orange';
c = 'banana';
d = 'grape_1';
e = 'grape_2';
f = 'grape_3';
switchStr = a; % goes through a through f
switch switchStr
case 'apple'
disp('apple')
case 'orange'
disp('orange')
case 'banana'
disp('banana')
case 'grape_#' % this is where i have a problem
disp('grapes')
end
how many numbers do you wish to distinguish? 1-10, 1-255,1-inf ?
it will only be 2 digit numbers
Let me clarify. No larger than 2 digit numbers.
strtok does work in this case since "strtok('apple', '_')" returns the string "apple".
a = 'apple';
b = 'orange';
c = 'banana';
d = 'grape_1';
e = 'grape_2';
f = 'grape_3';
switchStr = d; % goes through a through f
switch strtok(switchStr, '_')
case 'apple'
disp('apple')
case 'orange'
disp('orange')
case 'banana'
disp('banana')
case 'grape' % this is where i have a problem
disp('grapes')
end

Sign in to comment.

Categories

Find more on Historical Contests in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!