为什么octave解析此字符串以将两个数字赋予单个值?

时间:2016-09-30 18:18:12

标签: octave

在下面的八度音程中,为什么一个简单的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

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')