I recently collected some point data, and the trial number or independent variable is a string, such as:
X = ['a1' 'a2' 'a3' 'b1' 'b2' 'b3'];
I would like to create a for loop using the [1 2 3 1 2 3]. Is there any way to seperate the number and letter, or a way to us a string such as this as a for loop condition.
I do not want to use the index, and am trying to make this work for a much larger set of data, so I am trying to have it work automatically.

3 Comments

Do you really mean a string or a char? What you show just evaluates as
'a1a2a3b1b2b3'
with all the individual quotation marks irrelevant. Is that what you actually have?
X = ["a1" "a2" "a3" "b1" "b2" "b3"];
would be a string array, or
X = ['a1'; 'a2'; 'a3'; 'b1'; 'b2'; 'b3'];
would give you a char array from which extracting the numbers is simply a case of taking the 2nd column, if all letters and numbers will be, as in your example, no longer than a single character long each.
X = ['a1'; 'a2'; 'a3'; 'b1'; 'b2'; 'b3']; is the format, so yes it is a char i believe
So simply
str2num( X(:,2) )
would give what you want.

Sign in to comment.

 Accepted Answer

Stephen23
Stephen23 on 29 Aug 2019
Edited: Stephen23 on 29 Aug 2019
>> str = {'a1','a2','a3','b1','b2','b3'};
>> vec = sscanf([str{:}],'%*[ab]%f',[1,Inf])
vec =
1 2 3 1 2 3
>> vec = str2double(regexp(str,'\d+$','match','once'))
vec =
1 2 3 1 2 3
>> vec = str2double(regexprep(str,'^[a-z]+',''))
vec =
1 2 3 1 2 3

3 Comments

sorry if my formatting was off, the str data looks like this:
str =
120×3 char array
'a1 '
'a2 '
'a3 '
'b1 '
'b2 '
'b3 '
i am getting an error with the sscanf command. How can I make my char array in to a cell array
Stephen23
Stephen23 on 29 Aug 2019
Edited: Stephen23 on 30 Aug 2019
>> cha = ['a1 ';'a2 ';'a3 ';'b1 ';'b2 ';'b3 ']
cha =
a1
a2
a3
b1
b2
b3
>> vec = sscanf(cha(:,2:3).','%f',[1,Inf])
vec =
1 2 3 1 2 3
"How can I make my char array in to a cell array"
out = cellstr(cha)
This example strongly suggests that it is always a single digit following a single character that is relevant. If so, this will work too:
cha = ['a1 ';'a2 ';'a3 ';'b1 ';'b2 ';'b3 ']
vec = cha(:,2) - '0'

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements 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!