为什么八度解析这个字符串给两个数字一个单一的值



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

最新更新