2016-09-30 3 views
0

以下のオクターブセッションでは、単純なstrread操作でAとBの2つの数字が(1つではなく)表示されるのはなぜですか?オクターブはなぜこの文字列を解析して1つの値に2つの数値を与えるのですか?

octave:43> mystring = '18.0 8 307.0  130.0  3504.  12.0 70 1 "foo bar baz"' 
octave:43> [A,B,C,D,E,F,G,H] = strread(mystring, '%f %d %f %f %f %f %d %d %*f') 
A = 

    18 
    NaN 

B = 

    8 
    0 

C = 307 
D = 130 
E = 3504 
F = 12 
G = 70 
H = 1 

答えて

2

指定されたフォーマットを何回繰り返すか指定していないため、文字列の最後に当たるまで読み込み中です。 %*fは、"fooを消費し、最初の%fは、barを消費し、%dは、baz"を消費します。どちらも数字として適切に処理することができないため、予期しない結果が生じます。

2つ目の入力パラメータとして使用するリピート数を指定して、1つのコピーの読み取りのみを試みることができます。

[A,B,C,D,E,F,G,H] = strread(mystring, '%f %d %f %f %f %f %d %d %*f', 1) 

代わりに、あなたは、行の末尾に文字列を収容するためにあなたのフォーマット文字列を変更することができ

[A,B,C,D,E,F,G,H] = strread(mystring, '%f %d %f %f %f %f %d %d %*s %*s %*s') 
関連する問題