word()函数返回不同的结果,具体取决于gnuplot版本5.06和5.22

时间:2017-12-07 01:24:58

标签: function gnuplot version

我最近更新了gnuplot最新版本,5.22并且我的代码没有正常工作。我调试并找到原因。

str="1 2"
print word(str,3)+0

在之前的版本5.06或更早版本中,print显示0值且没有错误。 但是最新版本出现了错误,"在数字表达式出现的地方找到了非数字字符串"

没有+0,两个结果都是相同的,空白(没有输出),但最新版本将其视为字符串我认为。

我的代码有很多与word()相关的例程,所以如何在新版本中解决此问题?

2 个答案:

答案 0 :(得分:2)

您的代码似乎有两个潜在的危险假设:

  1. 从两个元素的列表中请求第三个元素会返回一个空字符串,而不是导致错误,

  2. 将空字符串转换为数字的
  3. 将产生0。

  4. 假设1似乎仍然存在于gnuplot 5.2.2中,但假设2没有。如果你真的想要那么你就可以创建一个包装器

    f(x) = (x eq "" ? 0 : x)
    

    并使用f(word(str,3))代替word(str,3)。但是,可能有更好的方法来处理不存在的元素。

答案 1 :(得分:1)

使用words检查索引:

w2num(list, i) = (i > 0 && i <= words(list)) ? word(list, i)+0 : 0

示例:

w2num(list, i) = (i > 0 && i <= words(list)) ? word(list, i)+0 : 0
l = "10 20"
do for [i=-1:3] { print w2num(l, i) }

打印

0
0
10
20
0