ようやく理解が追いつきました。
ローカル変数 koubai_moji にちゃんと初期値を設定してやれば良いので
ban さんの方法が正解
グローバル変数にしてもエラーは消えるのですが、あまり使いたくないです
他にも選択した線が二重になるという不具合があったりして修正しました
コジマさんのオリジナルのものには有効桁数を入力すると
次からその数値を引き継ぐようBATファイルを書き換える
機能がついてましたがこれは省きました
REM 勾配を‰表示.bat
CHCP 932
echo off
REM #jww
REM #cd
REM #h0
REM #c小数点以下有効桁数 無指定:2 /_/b
REM #0測定値の記入位置を指示してください free(L)
REM #1ln線を指示してください free(L)
REM #e
copy jwc_temp.txt temp.txt
ruby -x %~f0 %1
GOTO END
REM #~
◎コメント
◎バッチファイル(ファイル名は自由)
◎コピペ後、全角スペースを半角スペース2個に一括置換してください
#! ruby
# encoding: SJIS
$stdout=open("jwc_temp.txt","w")
$stderr=open("tmp_err.txt","w")
include Math
koubai_moji=""
keta=(ARGV[0] ? ARGV[0].gsub("/b","").to_i : 2)
def ika(x,keta)
begin
a=((x.to_f*10**keta).round).to_f/(10**keta)
a=a.to_i if a.to_s =~/^0\.0$/
return a
rescue
return "垂直"
end
end
open("temp.txt").readlines.each{|e|
xy=e.split(" ")
if xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
if xy[0]>xy[2]
xy[2],xy[0],xy[3],xy[1]=xy[0],xy[2],xy[1],xy[3]
elsif xy[0]==xy[2]
xy[3],xy[1]=xy[1],xy[3] if xy[3]
end
x,y=xy[2]-xy[0],xy[3]-xy[1]
l=sqrt(y**2+x**2)
kakudo=atan2(y,x)
koubai=y/x*1000
a=ika(koubai,keta)
if a=="垂直"
koubai_moji= "i=垂直"
elsif koubai<0
koubai_moji= "i=#{a.abs}‰ 右下り"
elsif koubai==0
koubai_moji= "i=#{a.abs}‰"
elsif koubai>0
koubai_moji= "i=#{a.abs}‰ 右上り"
end
printf("ch %.10f %.10f %.10f %.10f \"%s\n",0,0,1,0,koubai_moji)
elsif /^hq/!~e
puts e unless /^hq/=~e
end
}
__END__
:END