2017-01-06 2 views
2

У меня есть массив ячеек строк с разными значениями:Как читать форматированные данные из строки в matlab?

v = {'12.4B', '145.3M', '34.3M', '1.2B'}; 

Я хотел бы, чтобы преобразовать их в число. Использование sscanf Функция Я могу извлечь только числовые значения, но я хочу, чтобы умножить результат на миллиард или миллион в соответствии с буквой.

ответ

5

Вы можете заменить B и M с e9 и e6 соответственно (научной нотации) с использованием регулярной замены выражений (regexp), а затем преобразовать результирующие строки в число с str2double.

out = str2double(regexprep(v, {'B', 'M'}, {'e9', 'e6'}, 'ignorecase')) 

Вы можете, очевидно, расширить это, включив любые другие необходимые преобразования.

И как пример, показывающий, что происходит:

% Convert to scientific notation 
B = regexprep(v, {'B', 'M'}, {'e9', 'e6'}, 'ignorecase') 
% '12.4e9' '145.3e6' '34.3e6' '1.2e9' 

% Convert to numbers 
str2double(B) 
% 12400000000 145300000 34300000 1200000000 
+0

Я думал, как сделать это с картой, как вещь, и тогда ваш ответ пришел в –

+0

@RodyOldenhuis Да, что это одна из вещей, Мне нравится о 'regexprep'! – Suever

+0

Да, я нахожусь между 'regexprep' (гибким, мощным, удивительным, ...) и' strrep' (более читаемым, намного быстрее, более портативным, ...). О, ну, это наверняка будет моим ответом в этом случае :) –

2
% Data 
v = {'12.4B', '145.3M', '34.3M', '1.2B'}; 

% Replace characters with numeric equivalents 
v = strrep(v, 'k', 'e03'); % thousand 
v = strrep(v, 'M', 'e06'); % Million 
v = strrep(v, 'B', 'e09'); % Billion 
v = strrep(v, 'T', 'e12'); % Trillion 
... 

% Convert to numeric values 
w = str2double(v)