-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsiParse.m
More file actions
27 lines (23 loc) · 725 Bytes
/
siParse.m
File metadata and controls
27 lines (23 loc) · 725 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
% function [number, unit] = siParse(text)
function [number, unit] = siParse(text)
expr = '([+-]?\d*(\.\d*)?)\s*([yzafpnuµmkMGTPEZY]?)(\S*)';
tokens = regexp(text, expr, 'tokens');
tokens = tokens{:};
if length(tokens) == 3
number = tokens{1};
prefix = tokens{2};
unit = tokens{3};
if isempty(prefix)
level = 0;
else
prefixes = 'yzafpnµumkMGTPEZY';
levels = [-24:3:-6 -6 3:3:24];
ilevel = strfind(prefixes, prefix);
level = levels(ilevel);
end
number = str2double(number) * 10^level;
else
number = [];
unit = '';
end
end