从MATLAB命令行,当我输入我的变量a时,它给出了我预期的值:
a =
value_1
value_2
我希望访问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>
A + 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
答案 0 :(得分:2)
也许a
是一个带有换行符的字符串。要创建两个单独的变量,请尝试:
values = strtrim(strread(a, '%s', 'delimiter', sprintf('\n')))
strread
会将a拆分为单独的行,strtrim
将删除前导/尾随空格。
然后,您可以使用
values{1}
values{2}
(请注意,您必须使用大括号,因为这是字符串的单元格数组。)
答案 1 :(得分:1)
你是如何读取xml文件的?如果您正在使用xmlread,那么MatLab会为您添加大量空白区域,这可能是您遇到问题的原因。
http://www.mathworks.com/matlabcentral/fileexchange/28518-xml2struct
这会将您的xml文件放入一个结构中,您应该能够访问数组中的元素。
答案 2 :(得分:0)
你似乎有一些不方便的字符数组。您可以通过执行类似@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
,则需要再执行一步:
strings = textscan(a, '%s', 'delimiter', sprintf('\n'));
strings = [strings{1}(2:end)];