MATLAB 获取 char 的值



从MATLAB命令行,当我输入变量a时,它给了我预期的值:

a =

            value_1
            value_2

我想访问 a 的每个值,我尝试了 a(1),但这给了我空A 的类型为 1x49char。我怎样才能得到value_1和value_2?

 whos('a')
  Name      Size            Bytes  Class    Attributes
  a         1x49               98  char 

我从 xml 文件中获取 a:

<flag ="value">
    <flow>toto</flow>
     <flow>titi</flow>
 </flag>

答+0:

ans =    
    10  32  32   32  32  32  32  32  32  32  32  32  32  98,...
   111 111 108  101  97 110  95  84  10  32  32  32  32  32,...
   32   32  32   32  32  32  32  66  79  79  76  10  32  32,...
   32   32  32   32  32  32  32

也许a是一个带有换行符的字符串。要创建两个单独的变量,请尝试:

values = strtrim(strread(a, '%s', 'delimiter', sprintf('n')))

strread 会将 拆分为单独的行,strtrim将删除前导/尾随空格。然后,您可以使用以下方法访问线路

values{1}
values{2}

(请注意,您必须使用大括号,因为这是一个字符串的单元格数组)。

你是如何阅读xml文件的?如果您使用的是xmlread,那么MatLab会为您添加大量空白,并且可能是导致问题的原因。

http://www.mathworks.com/matlabcentral/fileexchange/28518-xml2struct

这会将您的 xml 文件放入一个结构中,您应该能够在其中访问数组中的元素。

您似乎有一个有点不方便的字符数组。您可以通过执行@Richante所说的操作,将此数组转换为更易于管理的形式:

strings = strread(a, '%s', 'delimiter', sprintf('n'));

然后你可以引用tototiti

>> b = strings{2}
b = 
toto
>> c = strings{3}
c = 
titi

请注意,strings{1}为空,因为a以换行符开头。另请注意,您不需要strtrim - strread已经处理好了。您可以通过执行以下操作来绕过初始换行

strings = strread(a(2:end), '%s', 'delimiter', sprintf('n'));

但只有在所有情况下第一个换行符始终存在的情况下,我才会这样做。我宁愿做

strings = strread(a, '%s', 'delimiter', sprintf('n'));
strings = strings(~cellfun('isempty', strings))

最后,如果您宁愿使用 textscan 而不是 strread ,则需要执行 1 个额外的步骤:

strings = textscan(a, '%s', 'delimiter', sprintf('n'));
strings = [strings{1}(2:end)];

最新更新