2017-12-07 22 views
1

최근에 gnuplot 최신 버전 5.22를 업데이트했으며 코드가 제대로 작동하지 않았습니다. 디버깅을하고 이유를 찾았습니다. 이전 버전의 word() 함수는 gnuplot 버전 5.06 및 5.22에 따라 다른 결과를 반환합니다.

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

, 5.06 이상은 print 오류없이 0의 값을 나타낸다. 하지만 최신 버전에 "숫자식이 예상되는 곳에서 숫자가 아닌 문자열이 발견되었습니다."

+0이 없으면 결과는 모두 공백 (출력 없음)이지만 최신 버전에서는 생각하는 문자열로 간주됩니다 .

내 코드에는 word()과 관련된 많은 루틴이 있으므로 새 버전에서이 문제를 어떻게 해결할 수 있습니까?

+1

사용'words'을 – Christoph

답변

2

코드는 두 개의 잠재적으로 위험한 가정을 보인다 :

두 가지 요소 목록에서 세 번째 요소를 요청하면 빈 문자열이 아닌 원인이 오류를 반환
  1. 그 그 빈 문자열을 숫자로 변환하면 0이됩니다.

가정 1은 여전히 ​​gnuplot 5.2.2에서 유지되지만 가정 2는 유지되지 않습니다. 당신은 정말 당신이 래퍼

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

을 만들고 f(word(str,3)) 대신 word(str,3)을 사용할 수 원하는 경우. 그러나 존재하지 않는 요소를 처리하는 더 좋은 방법이있을 수 있습니다.

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