Reading numbers from String

5 vues (au cours des 30 derniers jours)
Lukas Ehrler
Lukas Ehrler le 20 Juil 2022
Hello,
I have the following string
str = {'SRm40_' 'SRp5_'}
I want to read the numbers from str and include the m for a minus.
my desired Output would look like this
numbers = [-40 5]
I have tried the sscanf and regexp function but i dont seem to get it working
sscanf returns this
[numbers,~,err] = sscanf(string(str(1)),'%*5d')
err = 'Matching failure in format.'
So it cant read the the string because the first location has the 'E'.
If someone has a idea how to solve this, dont hesitate to answer :)
Have a great day
  4 commentaires
Andrew McCauley
Andrew McCauley le 20 Juil 2022
Modifié(e) : Andrew McCauley le 20 Juil 2022
In loop form in case needed:
str = {'SRm40_' 'SRp5_'};
numbers = zeros(1, length(str));
for countString = 1:length(str)
numbers(countString) = str2num(str{countString}(4:end-1));
if strcmp(str{countString}(3), 'm')
numbers(countString)=-numbers(countString);
end
end
Lukas Ehrler
Lukas Ehrler le 20 Juil 2022
thanks a lot for the quick answer!!

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 20 Juil 2022
Another approach:
str = {'SRm40_','SRp5_'};
vec = str2double(regexprep(str,{'[A-Z_]+','m','p'},{'','-','+'}))
vec = 1×2
-40 5

Plus de réponses (1)

Steven Lord
Steven Lord le 20 Juil 2022
Yet another approach:
str = {'SRm40_','SRp5_'};
str = replace(str, 'm', '-'); % Handle negative numbers
str = replace(str, 'p', '+'); % Handle positive numbers
d = cellfun(@(x) sscanf(x, 'SR%d_'), str) % sscanf requires its first input to be scalar
d = 1×2
-40 5

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Tags

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by