Extracting numbers from array of cells

Hello,
when reading data from a log file, I use "textscan", which yields an array of cells, e.g.
my_data_string = {'1.11'; '2.22'; '3.33'};
Now I want to convert all strings simultaneously to numbers.
How can I achieve this without using a for loop?
If I use the following approach,
my_data_number = textscan([my_data_string{:}], '%f'); % vector bracket causes "faulty" combined string
my_data_number = my_data_number{1,1}; % conversion of cell array to number array
my_data_number =
1.1120
0.2230
0.3300
the numbers are read incorrect because of the use of vector brackets inside the textscan command. This causes the strings to be all concanated without break, which then messes up the textscan command.
[my_data_string{:}]
ans =
'1.112.223.33'
I experimented with different brackets and vector notations, but so far, I could not find a solution. I am not necessarily fixed on using textscan, but I cannot use loops.
Thanks in advance for any advice,
DH

1 Comment

Why not simply:
>> my_data_string = {'1.11'; '2.22'; '3.33'};
>> num_vec = str2double(my_data_string)
num_vec =
1.11
2.22
3.33
?

Sign in to comment.

 Accepted Answer

V = regexp(my_data_string,'\d+[\.]?\d*','match','once');
Wanted = str2double(V)
% or
Wanted = str2double(my_data_string) % if the data appears exactly like shown in the example

4 Comments

One thing I just noticed:
This approach does NOT take into account negative signs.
How can I adjust the suggested formula to interpret the "-" sign as well?
No need for the square brackets:
'-?\d+\.?\d*'
Optional positive sign:
'[+-]?\d+\.?\d*'
Thank you Stephen :)

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2019a

Asked:

on 9 Jul 2019

Commented:

on 10 Jul 2019

Community Treasure Hunt

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

Start Hunting!