R.Nさん、sugiさん:こんにちは
質問者のhideです。
返信ありがとうございます。
外変のほううまく動作しました。
R.Nさん、sugiさんの意見を参考にして、元のスクリプトのエラー部分を削除してみたところ、
コジマ さんのスクリプトも動くようになりました。
include Math
$keta=2
while ARGV.size>1
case argument=ARGV.pop
when /\/b/
$keta=argument[2..-1].to_i
end
end
def ika(x)
a=((x.to_f*10**$keta).round).to_f/(10**$keta)
a=a.to_i if a.to_s =~/^0\.0$/
return a
end
while ARGF.gets
xy=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
if koubai<0
koubai_moji= "i=#{ika(koubai).abs}‰ 右下り"
elsif koubai==0
koubai_moji= "i=#{ika(koubai).abs}‰"
else
koubai_moji= "i=#{ika(koubai).abs}‰ 右上り"
end
printf("ch %.10f %.10f %.10f %.10f \"%s\n",0,0,1,0,koubai_moji)
end
end
printf("h##{koubai_moji}\n")
data.collect!{|item|
if item=~/^REM #c小数点以下有効桁数 無指定:/
item=$&+$'.gsub(/^\d+/,$keta.to_s)
else
item
end
}
しかし、勾配を‰表示の一括記入の外部変形は、いまだうまく動きません。
厚かましいお願いですが、線上に平行で一括で線上側には勾配(1:n,%)、線下側には線長(m)、
が記入できる外部変形があれば、ありがたいです。計画図面、施工図のチェックに使います。
よろしくお願いします。
※過去ログ抜粋
【タイトル】Re(6):一括記入なら
【記事番号】 8686 (8683)
【 日時 】06/02/17 20:47
【 発言者 】コジマ
線上に一括記入するなら、以下の外変のほうが速いです。
(線を寸法線に見立てて、寸法値のように記述します。)
◎バッチファイル(ファイル名 ‰2.bat)
以下の文をコピペ後、全角スペースを半角スペースに一括置換。
REM 勾配を‰表示の一括記入
echo off
REM #jww
REM #cd
REM #h0
REM #c線と文字の離れ(図寸) 無指定:1.0 /_/a
REM #c小数点以下有効桁数 無指定:2 /_/b
REM #1ln線を指示してください free(L)
REM #99#
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks ‰2.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 ‰2.rb)
以下の文をコピペ後、全角スペースを半角スペースに一括置換。
include Math;by=[]
hanare=1.0
$keta=2
puts "cc1"
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
hanare=argument[2..-1].to_f
when /\/b/
$keta=argument[2..-1].to_i
end
end
def ika(x)
a=((x.to_f*10**$keta).round).to_f/(10**$keta)
a=a.to_i if a.to_s =~/^0\.0$/
return a
end
while ARGF.gets
xy=split
if xy[0]=~/^hs/
xy[1..-1].each{|item|by< end
if xy[0]=~/^lg/
lg=xy[0][2,1];zusun=by[lg.hex]
end
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
if koubai<0
koubai_moji= "i=#{ika(koubai).abs}‰→"
elsif koubai==0
koubai_moji= "i=#{ika(koubai).abs}‰"
else
koubai_moji= "←i=#{ika(koubai).abs}‰"
end
printf("ch %.10f %.10f %.10f %.10f \"%s\n",
xy[0]+l/2*cos(kakudo)-hanare*zusun*sin(kakudo),
xy[1]+l/2*sin(kakudo)+hanare*zusun*cos(kakudo),
l*cos(kakudo),l*sin(kakudo),koubai_moji)
end
end
data=[]
open($0,"r"){|f|
while line=f.gets
data< end
}
data.collect!{|item|
if item=~/^hanare=/
item=$&+hanare.to_s
elsif item=~/^\$keta=/
item=$&+$keta.to_s
else
item
end
}
open($0,"w"){|f|data.each{|item|f.puts item};}
data=[]
open("‰2.bat","r"){|f|
while line=f.gets
data< end
}
data.collect!{|item|
if item=~/^REM #c線と文字の離れ\(図寸\) 無指定:/
item=$&+$'.gsub(/\d+\.*\d*/,hanare.to_s)
elsif item=~/^REM #c小数点以下有効桁数 無指定:/
item=$&+$'.gsub(/\d+/,$keta.to_s)
else
item
end
}
open("‰2.bat","w"){|f|data.each{|item|f.puts item};}