我最近更新了gnuplot最新版本,5.22并且我的代码没有正常工作。我调试并找到原因。
str="1 2"
print word(str,3)+0
在之前的版本5.06或更早版本中,print
显示0值且没有错误。
但是最新版本出现了错误,"在数字表达式出现的地方找到了非数字字符串"
没有+0
,两个结果都是相同的,空白(没有输出),但最新版本将其视为字符串我认为。
我的代码有很多与word()
相关的例程,所以如何在新版本中解决此问题?
答案 0 :(得分:2)
您的代码似乎有两个潜在的危险假设:
从两个元素的列表中请求第三个元素会返回一个空字符串,而不是导致错误,
将产生0。
假设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