-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 ファイルから 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
4

3 に答える 3

2

おそらくa、改行を含む文字列です。2 つの個別の変数を作成するには、以下を試してください。

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

strreada を別々の行に分割し、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'));

toto次に、およびtitiによって参照できます

>> b = strings{2}
b = 
toto

>> c = strings{3}
c = 
titi

改行文字で始まるstrings{1}ため、空であることに注意してください。--aは必要ないことにも注意してください。これはすでに処理されています。次のようにして、最初の改行を回避できますstrtrimstrread

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 に答える