在下面的八度会话中,为什么一个简单的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')