从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'));
然后你可以引用toto
和titi
>> 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)];