-3

在 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 文件中得到一个:

<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
4

3 回答 3

2

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

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

strread将 a 拆分为单独的行,strtrim并将删除前导/尾随空格。然后您可以使用

values{1}
values{2}

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

于 2012-08-14T13:25:38.753 回答
1

您如何阅读 xml 文件?如果您使用的是 xmlread,那么 MatLab 会在其中为您添加大量空白区域,这可能是您出现问题的原因。

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

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

于 2012-08-16T19:53:20.390 回答
0

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

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

然后你可以参考totoand titiby

>> 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)];
于 2012-08-16T14:42:44.047 回答