在下面的八度音程中,为什么一个简单的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
答案 0 :(得分:2)
由于您没有指定重复提供的格式的次数,因此它会一直读取,直到它到达字符串的末尾。 %*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')