在MATLAB

时间:2017-04-07 10:38:11

标签: matlab

我有任意字符串,应根据其内容转换为适合的数据类型(即标量双精度数,双数组或字符串)。 str2num()在解释status返回值时起作用,但函数本身会评估字符串的内容:

  1. 导致str2num('3-7')成为-4 (double),但我想坚持'3-7' (char array)
  2. 是一个严重的安全问题,因为它可能会执行任何代码
  3. 一种解决方法是使用str2double(),它不会以双数组结尾,而只会使用标量或字符串。不幸的是,isstrprop()并不适合这个。

    示例输入(和输出):

    • '123.4' - > 123.4(双标量)[由str2double()str2num()]
    • 覆盖
    • abc' - > 'abc'(字符数组)[本身由str2double()str2num()覆盖]
    • '123,456' - > [123,456](双数组)[仅由str2num()覆盖]
    • '3-7' - > '3-7'(字符数组)[不知道如何覆盖]

2 个答案:

答案 0 :(得分:1)

使用str2doublestrsplit

C = {'123.4','abc','123,456','3-7'};
for ii = 1:numel(C)
    CC = strsplit(C{ii},',');
    res = [str2double(CC)];
    if isnan(res)
        res = C{ii};
    end
    disp(res)
    disp(class(res))
    disp('****************')
end

所示:

123.4000
double
****************
abc
char
****************
123   456
double
****************
3-7
char
****************

答案 1 :(得分:0)

解决方案(感谢@ user2999345):

C = {'123.4','abc','123,456','3-7','NaN','',[]};
for ii = 1:numel(C)
  r{ii,1} = str2impl(C{ii});
end
disp(r)

[  123.4000]
'abc'
[1×2 double]
'3-7'
[       NaN]
[]
[]

结束于

System.Reflection.Emit