Page 1945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼動かない外部変形を動かしたい。 hide 23/12/7(木) 21:00 ┣Re:動かない外部変形を動かしたい。 sugi 23/12/9(土) 5:57 ┃ ┣Re:動かない外部変形を動かしたい。 sugi 23/12/9(土) 8:01 ┃ ┗Re:動かない外部変形を動かしたい。 R.N 23/12/9(土) 8:05 ┃ ┗Re:動かない外部変形を動かしたい。 sugi 23/12/9(土) 9:53 ┃ ┗Re:動かない外部変形を動かしたい。 R.N 23/12/9(土) 12:55 ┃ ┗Re:動かない外部変形を動かしたい。 sugi 23/12/9(土) 18:27 ┃ ┗Re:動かない外部変形を動かしたい。 ban 23/12/9(土) 21:39 ┃ ┗Re:動かない外部変形を動かしたい。 sugi 23/12/10(日) 5:45 ┣Re:動かない外部変形を動かしたい。 hide 23/12/9(土) 16:50 ┃ ┗Re:動かない外部変形を動かしたい。 sugi 23/12/10(日) 5:53 ┗Re:動かない外部変形を動かしたい。 hide 23/12/10(日) 16:40 ┗Re:動かない外部変形を動かしたい。 sugi 23/12/11(月) 6:13 ┗Re:動かない外部変形を動かしたい。 hide 23/12/11(月) 12:12 ┗Re:動かない外部変形を動かしたい。 sugi 23/12/11(月) 13:34 ┗Re:動かない外部変形を動かしたい。 sugi 23/12/11(月) 15:30 ┗Re:動かない外部変形を動かしたい。 hide 23/12/11(月) 22:14 ┗Re:動かない外部変形を動かしたい。 sugi 23/12/13(水) 8:54 ┗Re:動かない外部変形を動かしたい。 ban 23/12/13(水) 10:38 ┗Re:動かない外部変形を動かしたい。 sugi 23/12/13(水) 11:03 ┗Re:動かない外部変形を動かしたい。 hide 23/12/13(水) 21:10 ─────────────────────────────────────── ■題名 : 動かない外部変形を動かしたい。 ■名前 : hide ■日付 : 23/12/7(木) 21:00 -------------------------------------------------------------------------
| こんな外部変形を発見しましたが、動きません。使えるようにしたいです。お願いします。 作成者 コジマ 様 ◎バッチファイル(ファイル名 ‰.bat) コピペ後、全角スペースを半角スペースに一括置換してください。 REM 勾配を‰表示 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 > nul ruby -Ks ‰.rb temp.txt %1 > jwc_temp.txt ◎スプリプトファイル(ファイル名 ‰.rb) コピペ後、全角スペースを半角スペースに一括置換してください。 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=[] open($0,"r"){|f| while line=f.gets data< end } data.collect!{|item|item=~/^\$keta=/ ? item=$&+$keta.to_s : item=item} open($0,"w"){|f|data.each{|item|f.puts item};} data=[] open("‰.bat","r"){|f| while line=f.gets data< end } data.collect!{|item| if item=~/^REM #c小数点以下有効桁数 無指定:/ item=$&+$'.gsub(/^\d+/,$keta.to_s) else item end } open("‰.bat","w"){|f|data.each{|item|f.puts item};} 以下のようなエラーが出ます。 C:\JWW\外変寸法\勾配を‰表示>echo off ‰.rb:30: syntax error, unexpected tIDENTIFIER, expecting kEND ‰.rb:52: syntax error, unexpected kEND ‰.rb:71: syntax error, unexpected kEND ‰.rb:85: syntax error, unexpected $end, expecting kEND open("‰.bat","w"){|f|data.each{|item|f.puts item};} ^ 続行するには何かキーを押してください . . . 私の環境では、その他の外部変形は、ほぼ動作しています。 ※【タイトル】Re(4):測定で角度を%表示(追伸) 【記事番号】 8634 (8615) 【 日時 】06/02/17 09:02 【 発言者 】コジマ より、抜粋しています。 |
| スクリプトの意図はだいたい読み取れたように思います うちの環境でも動くように修正してみました インデントが崩れてしまったらごめんなさい 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 > nul ruby -x %~f0 %1 GOTO END REM #~ ◎コメント ◎バッチファイル(ファイル名は自由) ◎コピペ後、全角スペースを半角スペースに一括置換してください。 #! ruby # encoding: SJIS $stdout=open("jwc_temp.txt","w") $stderr=open("tmp_err.txt","w") include Math 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 puts "he 垂直線が選ばれたようです" exit end end open("temp.txt").readlines.each{|e| puts e unless /^hq/=~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 if koubai<0 koubai_moji= "i=#{ika(koubai,keta).abs}‰ 右下り" elsif koubai==0 koubai_moji= "i=#{ika(koubai,keta).abs}‰" else koubai_moji= "i=#{ika(koubai,keta).abs}‰ 右上り" end printf("ch %.10f %.10f %.10f %.10f \"%s\n",0,0,1,0,koubai_moji) end } puts "h##{koubai_moji}" __END__ :END |
| わたしの場合 cmd は標準で文字コード utf-8 を使ってるんですが 外部変形の場合は sjis なので「CHCP 932」と教えてやらないと うまく動作してくれません インデントが崩れる問題について 半角スペースのままだとインデントが崩れるから アップするときに全角スペースに直してるって ことに気が付きませんでした ということでやり直し 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 > nul 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 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 puts "he 垂直線が選ばれたようです" exit end end open("temp.txt").readlines.each{|e| puts e unless /^hq/=~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 if koubai<0 koubai_moji= "i=#{ika(koubai,keta).abs}‰ 右下り" elsif koubai==0 koubai_moji= "i=#{ika(koubai,keta).abs}‰" else koubai_moji= "i=#{ika(koubai,keta).abs}‰ 右上り" end printf("ch %.10f %.10f %.10f %.10f \"%s\n",0,0,1,0,koubai_moji) end } puts "h##{koubai_moji}" __END__ :END |
| ▼sugiさん:こんにちは スクリプトの提供、ありがとうございます。 >puts "h##{koubai_moji}" koubai_moji ⇒ $koubai_moji に、全て置換してみましたが? |
| >> koubai_moji ⇒ $koubai_moji >> に、全て置換してみましたが? うまく動作しなかったということでしょうか? この部分についてはグローバル変数は極力使うなって 以前に聞いた覚えがあってローカル変数にしてみました rubyもバージョンにより以前は認められてた書き方が 許されなくなったとかいうこともあって 今回のもそんな一例のようで できるだけどのバージョンでも通用するように 書き直したつもりですがうまくいってないようなら 「tmp_err.txt」にエラー内容が書き込まれてるかもしれないので それを貼ってもらえればなんとかできるかもしれません |
| ▼sugiさん:すみません >>> koubai_moji ⇒ $koubai_moji >>> に、全て置換してみましたが? それが---動作は問題ないのですが、コメント文が表示されなくて なぜ---と思いつつ <エラー出力内容> ‰_sugi.rb:46: undefined local variable or method `koubai_moji' for main:Object (NameError) win11_64 jww8.25a ruby 1.8.7 (2013-06-27 patchlevel 374) [i386-mingw32] >うまく動作しなかったということでしょうか? >この部分についてはグローバル変数は極力使うなって >以前に聞いた覚えがあってローカル変数にしてみました > >rubyもバージョンにより以前は認められてた書き方が >許されなくなったとかいうこともあって >今回のもそんな一例のようで >できるだけどのバージョンでも通用するように >書き直したつもりですがうまくいってないようなら >「tmp_err.txt」にエラー内容が書き込まれてるかもしれないので >それを貼ってもらえればなんとかできるかもしれません |
| puts "h##{koubai_moji}" のところで koubai_moji なんて変数やメソッドは定義されてませんよって 怒られてるようですがすぐ上で koubai_moji のローカル変数に値を入力してるので なんでこんなメッセージが出るのかちょっとよく分かりません dos窓のメッセージが文字化けする問題が関係してるなら CHCP 932 を先頭に持ってくれば直るかもしれないです ただこれでは jwwから選択しようとした場合のコメントが 意味不明になりそうで2行目に控えさせてみました |
| $stderr=open("tmp_err.txt","w") と include Math の間に、 koubai_moji= "" を記述したらコメント文も表示されました。 $stderr=open("tmp_err.txt","w") koubai_moji= "" include Math |
| ようやく理解が追いつきました。 ローカル変数 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 |
| 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};} |
| > 線上に平行で一括で線上側には勾配(1:n,%)、線下側には線長(m) というのには対応できてませんが 取り敢えず勾配の入力だけはできるようになりました 線長入力はひとまず宿題ということで REM 一括記入.bat REM 勾配を‰表示の一括記入 CHCP 932 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 ruby -Ks -x %~f0 %1 %2 GOTO END REM #~ ◎コメント ◎スクリプトファイル(ファイル名は自由) ◎コピペ後、全角スペースを半角スペース2個に一括置換してください #! ruby # encoding: SJIS $stdout=open("jwc_temp.txt","w") $stderr=open("tmp_err.txt","w") include Math by,zusun=[],1.0 koubai_moji="" hanare=(ARGV[0] ? ARGV[0].gsub("/a","").to_f : 1.0) keta=(ARGV[1] ? ARGV[1].gsub("/b","").to_i : 2) puts "cc1" 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 /^hs/=~xy[0] xy[1..-1].each{|item|by << item} puts e elsif /^lg/=~xy[0] lg=xy[0][2,1] zusun=by[lg.hex].to_f puts e elsif /^\d|^-/=~xy[0] 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}‰" else koubai_moji= "←i=#{a.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) elsif /^hq/!~e puts e unless /^hq/=~e end } __END__ :END |
| 質問者のhideです。sugiさん、こんにちは。質問者のhideです。要望に応えていただいて 大変感謝しています。なんか、徹夜されたみたいで、大変恐縮しています。お体大切にしてください。 プログラム、走らせてみましたが、 ‰表示のほうは、 桁表示のほうが、無理数ではうまくいくが、切りの良い数値のときは、小数点1位表示となります。 また、一括記入のほうは、 小数点有効桁数を打ちかえても2桁のままで、また、切りの良い数値の ときは、小数点1位表示となります。(例:i=301.59‰→、←i=20.0‰) 小数点有効桁数が、うまく機能していません。 桁数2桁用、3桁用などのbatファイルを複数作って対応してもよいのですが、プログラム内のどの部分を書き換えてよいのかわかりません。気長に返答お待ちしています。健康第1です。 よろしくお願いします。 |
| 機械屋には夜勤というものがあって 昼夜転倒の生活をしている人間もいるのです 桁表示の方は sprintf とか使えば直せると思うのですが ちょっと待ってください 一括記入の方は調整は必要でしょうが大枠はできた気がする REM 一括記入.bat REM 勾配を‰表示の一括記入 CHCP 932 echo off REM #jww REM #cd REM #h0 REM #c線と文字の離れ(図寸) 無指定:1.0 /_/a REM #c勾配有効桁数 無指定:2 /_/b REM #c長さ有効桁数 無指定:3 /_/c REM #1ln線を指示してください free(L) REM #99# REM #e copy jwc_temp.txt temp.txt ruby -Ks -x %~f0 %1 %2 %3 GOTO END REM #~ ◎コメント ◎スクリプトファイル(ファイル名は自由) ◎以下の文をコピペ後、全角スペースを半角スペース二個に一括置換 #! ruby # encoding: SJIS $stdout=open("jwc_temp.txt","w") $stderr=open("tmp_err.txt","w") include Math require "matrix" hch,hs,by,zusun,takasa,l,mk,ml=[],[],[],0,0,0,"","" hanare=(ARGV[0] ? ARGV[0].gsub("/a","").to_f : 1.0) kketa=(ARGV[1] ? ARGV[1].gsub("/b","").to_i : 2) nketa=(ARGV[2] ? ARGV[2].gsub("/c","").to_i : 3) puts "cc4" open("temp.txt").readlines.each{|e| xy=e.split(" ") puts e unless /^hq|^ [\d-]/=~e if /^hs/=~e xy[1..-1].each{|item|by << item} elsif /^lg/=~e lg=xy[0][2,1] zusun=by[lg.hex].to_f elsif /^hch/=~e hch=xy elsif /^cn0/=~e takasa=xy[2].to_f*0.5*zusun elsif /^cn\d/=~e takasa=hch[e.gsub("cn","").to_i].to_f*0.5*zusun elsif /^ [\d-]/=~e xy=xy.map{|f|f.to_f} vs=Vector[xy[0],xy[1]] ve=Vector[xy[2],xy[3]] v1=ve-vs v2=Matrix[[0,-1.0],[1.0,0]]*v1*(1.0/v1.r)*(hanare+takasa) p1=(vs+v1*0.5+v2) p2=(vs+v1*0.5-v2) begin a=(v1[1]/v1[0]*1000).round(kketa) rescue a="垂直" end l=v1.r if a=="垂直" mk="i=垂直" elsif a<0 mk=%Q|i=#{sprintf("%.#{kketa}f",a.abs)}‰→| elsif a==0 mk=%Q|i=#{sprintf("%.#{kketa}f",a.abs)}‰| else mk=%Q|←i=#{sprintf("%.#{kketa}f",a.abs)}‰| end ml=sprintf("%.#{nketa}f",l.round(nketa)) puts %Q|ch #{p1[0]} #{p1[1]} #{v1[0]} #{v1[1]} "#{mk}| puts %Q|ch #{p2[0]} #{p2[1]} #{v1[0]} #{v1[1]} "#{ml}| end } __END__ :END |
| 質問者のhideです。sugiさん、返信ありがとうございます。感謝感激感動です! うーん、動きませでした。 GOTO ENDの前にpauseを記入すると C:\JWW\外変寸法\勾配%>REM 一括記入.bat C:\JWW\外変寸法\勾配%>REM 勾配を‰表示の一括記入 C:\JWW\外変寸法\勾配%>CHCP 932 現在のコード ページ: 932 C:\JWW\外変寸法\勾配%>echo off 1 個のファイルをコピーしました。 続行するには何かキーを押してください . . . と、DOS窓に表示。 tmp_err.txt C:/JWW/外変寸法/勾配%/一括記入.bat:76:in `round': wrong number of arguments (1 for 0) (ArgumentError) from C:/JWW/外変寸法/勾配%/一括記入.bat:76 from C:/JWW/外変寸法/勾配%/一括記入.bat:39:in `each' from C:/JWW/外変寸法/勾配%/一括記入.bat:39 当方PC環境は、win7 現在のディレクトリは C:/JWW/便利外変/jwruby ruby のバージョンは ruby 1.8.7 (2013-06-27 patchlevel 374) [i386-mingw32] ruby のロードパスは c:/ruby/lib/ruby/site_ruby/1.8 c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt c:/ruby/lib/ruby/site_ruby c:/ruby/lib/ruby/vendor_ruby/1.8 c:/ruby/lib/ruby/vendor_ruby/1.8/i386-msvcrt c:/ruby/lib/ruby/vendor_ruby c:/ruby/lib/ruby/1.8 c:/ruby/lib/ruby/1.8/i386-mingw32 です。 できれば、範囲選択で線を複数選択できたほうが大変便利と思います。 よろしくお願いします。 |
| 次の修正で範囲選択で一度に複数選択出来るようにしてみようと思います 私の環境は ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32] 調べてみたら roundの仕様が変わっていました 取り敢えず次の二箇所を探して変更してみてください (誤):a=(v1[1]/v1[0]*1000).round(kketa) (正):a=((v1[1]/v1[0]*1000)*10.0**kketa).round*0.1**kketa (誤):ml=sprintf("%.#{nketa}f",l.round(nketa)) (正):ml=sprintf("%.#{nketa}f",(l*10.0**nketa).round*0.1**nketa) |
| 修正のたびにバッチファイルをアップするのはちょっとうるさいので ホームページに準備してみました 現状、ここまでできました 要望とかあれば引き続きこちらの掲示板に書き込んでください http://pansy.s1010.xrea.com/2023/12/11/%e9%95%b7%e3%81%95%e5%8b%be%e9%85%8d%e8%a8%98%e5%85%a5/ |
| 掲示板のスクリプトをスマフォ経由でPCのterapadエディターに取り込んだところ、改行がありませんでしたので、独自に改行を追加編集しました。。また、なぜか、67行目、69行目、102行目付近の \dが \d に、文字化けしていましたが、プログラムは、うまく動作しました。 wo-- ほぼ完ぺきです。これは使えます。数限りない厚かましい要望に応えていただき、大変感謝感激感動です。 これは、断面図のチェック、施工図の作成などに威力を発揮します。 実行結果です。 長さ勾配一括を実行したとき、 線と文字の離れ(図寸) に 数値 を入力すると、勾配や長さがが 整数 になったりします。 例:入力 1 1 1 結果 勾配 整数(異常) 長さ 整数(異常) 例:入力 2 2 2 結果 勾配 整数(異常) 長さ 整数(異常) 例:入力 1 無指定 無指定 結果 勾配 整数(異常) 長さ 正常 例:入力 2 無指定 無指定 結果 勾配 整数(異常) 長さ 正常 線と文字の離れ(図寸) に 100 を入力しても、文字は離れていないような気がします。 また、単位ですが、勾配は%、長さはmのほうが土木系には使いやすいです。 法勾配1:nの範囲選択バージョンも追加していただきたいです。続きこちらの掲示板に書き込んでください > >http://pansy.s1010.xrea.com/2023/12/11/%e9%95%b7%e3%81%95%e5%8b%be%e9%85%8d%e8%a8%98%e5%85%a5/ |
| ホームページの外部変形を更新しました 外部変形の右上のバッチファイル名からコピーできるので terapadで直接コピーして SJIS で保存し直すとやりやすいかと思います \dは正規表現の数字のことであれば文字化けでなくてこれで合っています 久しぶりに外部変形を作ってオプションの処理の仕方を間違えてました #R.Nさん、ご指摘ありがとうございます 法勾配については馴染みがなくって調べながら作ってみました 充分にチェックしていないので他にもまだ動作がおかしい点が あれば教えてください |
| ▼sugiさん: >ホームページの外部変形を更新しました >外部変形の右上のバッチファイル名からコピーできるので >terapadで直接コピーして SJIS で保存し直すとやりやすいかと思います > >\dは正規表現の数字のことであれば文字化けでなくてこれで合っています > >久しぶりに外部変形を作ってオプションの処理の仕方を間違えてました >#R.Nさん、ご指摘ありがとうございます > >法勾配については馴染みがなくって調べながら作ってみました > >充分にチェックしていないので他にもまだ動作がおかしい点が >あれば教えてください 改良有難うございます。 ruby 1.8.6でも動作しています。 表示単位が%になっています。(‰でない) 長さの単位がmとなっています。(数値はmm) |
| >> 表示単位が%になっています。(‰でない) >> 長さの単位がmとなっています。(数値はmm) この辺はhideさんの要望に応えた積りだったのですが 機械民には馴染みがなくって見当外れだったかも 土木系の方は日常的にm単位で図面を描くのか なんて思ったりしてました |
| 新しいbatファイルありがとうございます。 大変うれしいです。 実行してみました。 未実行 35と39行目の C:\ruby187b\bin\ruby -Ks -x %~f0 %1 %2 %3 %4 を #C:\ruby187b\bin\ ruby -Ks -x %~f0 %1 %2 %3 %4 に変更、動作確認。(ほっ) 書き出された数値を見ると 傾きは、 数値は‰で単位は%。 長さは、 数値はmmで単位はm。 よって、 112、114行目の a=((v1[1]/v1[0]*1000)*10.0**kke).round*0.1**kke を # a=((v1[1]/v1[0]*1000)*10.0**kke).round*0.1**kke a=((v1[1]/v1[0]*100)*10.0**kke).round*0.1**kke に変更、 101、141、15行目の l=v1.r を # l=v1.r l=0.001*v1.r に変更、 有効桁数を無指定3.0にしたいので 76行目を kke=(opt==2 ? 3 :3)に変更、 単位%、m 全角を、半角に変更、 2行目、‰を% に変更、 動作確認。(ほっ) とってもいいものを作っていただきました。rubyのプログラムも勉強させていただきました。 私のわがままに、長々付き合っていただきありがとうございます。 スギさんのこのスキル以上に、精神力がすごいと思います。 |