matlab获取char的值

时间:2012-08-14 12:26:55

标签: matlab matlab-deployment

从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

3 个答案:

答案 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'));

然后,您可以通过

引用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,则需要再执行一步:

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