为什么 Octave 解析这个字符串将两个数字赋予一个值?
Why is octave parsing this string to give two numbers to a single value?
在下面的八度音程中,为什么一个简单的 strread
操作显示 A 和 B 的两个数字(而不是一个)?
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
由于您没有指定重复提供的格式的次数,它一直在读取直到到达字符串的末尾。 %*f
消耗 "foo
,第一个 %f
消耗 bar
,%d
消耗 baz"
。由于这些都不能作为数字正确处理,因此会导致意外结果。
您可以指定要用作第二个输入参数的重复次数,以强制它只尝试读取一份副本。
[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')
在下面的八度音程中,为什么一个简单的 strread
操作显示 A 和 B 的两个数字(而不是一个)?
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
由于您没有指定重复提供的格式的次数,它一直在读取直到到达字符串的末尾。 %*f
消耗 "foo
,第一个 %f
消耗 bar
,%d
消耗 baz"
。由于这些都不能作为数字正确处理,因此会导致意外结果。
您可以指定要用作第二个输入参数的重复次数,以强制它只尝试读取一份副本。
[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')