Page 74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼「接近した文字の連結」について zoo 15/07/19(日) 7:03 ┣Re(1):「接近した文字の連結」について kojima 15/07/19(日) 9:41 ┣Re(1):「接近した文字の連結」について LA 15/07/19(日) 20:08 ┗Re(1):「接近した文字の連結」について zoo 15/07/20(月) 5:41 ─────────────────────────────────────── ■題名 : 「接近した文字の連結」について ■名前 : zoo ■日付 : 15/07/19(日) 7:03 -------------------------------------------------------------------------
Jw_cad 情報交換室15/05/12のkojimaさんの「接近した文字の連結」を 使わせていただいています。....というか使えてませんので教えてください。 バッチをJWWに入れてjwwから直接だと使えます。 下位フォルダに入れg_plusに組み込むと止まります。状況は下記です。 文字を範囲選択→確定→文字間隔の最大値→空欄のままクリック→ DOSプロンプトが出て次の状態で止まります。 -------------------------------------------------------------------------- C:/JWW/g_plus.bat:127: warning: parenthesize argument(s)for future version C:/JWW/g_plus.bat:127: warning: parenthesize argument(s)for future version C:/JWW/g_plus.bat:128: warning: parenthesize argument(s)for future version C:/JWW/g_plus.bat:129: syntax error -------------------------------------------------------------------------- で、g_plus.batは -------------------------------------------------------------------------- 122|if n==0 123| STDERR.puts "処理した文字数:0" 124|else 125| STDERR.puts "↑","上記の文字を処理しました" 126|end 127|rem modified by G+ 128|copy jwc_temp.txt "C:\Jww\g_temp.txt" >nul 129|C: 130|cd "C:\Jww" 131|copy g_temp.txt jwc_temp.txt > nul |
バッチファイルとスクリプトファイルを別々にしないと 外変メニューソフト(G_PLUS等)では動作しません。 ↓バッチファイル(この行はコピペしない) @REM 接近した文字の連結 @echo off REM #jww REM #cd REM #zz REM #h3 REM #hc文字を範囲選択してください。 文字基点は全て左下に変更されます REM #c文字間隔の最大値(図寸) 無指定:1.0/_/a REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -Ks moji_join.rb temp.txt %1 > jwc_temp.txt pause ↓スクリプトファイル(この行はコピペしない)ファイル名:moji_join.rb include Math str_d=1.0 while ARGV.size>1 case argument=ARGV.pop when /\/a/ str_d=argument[2..-1].to_f end end #文字データのクラス class Strdata attr_accessor :ch, :cn, :font, :str, :x1, :y1, :x2, :y2 def initialize(ch,cn,font,str,x1,y1,x2,y2) @ch=ch @cn=cn @font=font @str=str @x1=x1 @y1=y1 @x2=x2 @y2=y2 end end #文字列の配列str_aから連続した部分文字列を抽出してrenzokuに格納 def renzoku_moji(str_a,str_d) a=str_a.shift renzoku=[a] begin b=str_a.find{|item2| l=hypot(item2.x1-a.x2,item2.y1-a.y2) l<=str_d && a.ch==item2.ch && a.cn==item2.cn } if b a=b renzoku<<a str_a.delete_if{|item2|item2==b} end end while(b) begin a=renzoku[0] b=str_a.find{|item2| l=hypot(a.y1-item2.y2,a.x1-item2.x2) l<=str_d && a.ch==item2.ch && a.cn==item2.cn } if b a=b renzoku.unshift(a) str_a.delete_if{|item2|item2==b} end end while(b) return renzoku end while ARGF.gets if $_ =~ /^z3/ STDERR.puts "寸法値が選択されています 処理を中止します" exit end end puts "hd" str_a=[] open("temp.txt","r"){|f| while f.gets xy=$_.split if xy[0] =~ /^hq/ elsif xy[0] =~ /^cn\"/ font=$_.chomp elsif xy[0] =~ /^cn\d/ cn=$_.chomp elsif xy[0] =~ /^c[hv]/ if $_ =~ /\"/ moji=$'.chomp ch=xy[0] x1,y1=xy[1].to_f,xy[2].to_f l=hypot(xy[4].to_f,xy[3].to_f) arg=atan2(xy[4].to_f,xy[3].to_f) x2,y2=x1+l*cos(arg),y1+l*sin(arg) str_a<<Strdata.new(ch,cn,font,moji,x1,y1,x2,y2) end else print $_ end end } n=0 while str_a.size>0 renzoku=renzoku_moji(str_a,str_d) moji_a=[] renzoku.each{|item|moji_a<<item.str} string=moji_a.join puts renzoku[0].cn,renzoku[0].font ch=renzoku[0].ch x1,y1=renzoku[0].x1,renzoku[0].y1 xl=renzoku[0].x2-renzoku[0].x1 yl=renzoku[0].y2-renzoku[0].y1 printf("%s %.11f %.11f %.11f %.11f \"%s\n",ch,x1,y1,xl,yl,string) if moji_a.size>1 STDERR.puts moji_a.join(" & ")<<" → "<<moji_a.join n += 1 end end if n==0 STDERR.puts "処理した文字数:0" else STDERR.puts "↑","上記の文字を処理しました" end |
▼zooさん: こんにちは G+のしくみは、 実行したい外変batファイルの前後に、 ・カレントフォルダを実行したい外変のフォルダへ移動する ・JWWから出力されるjwc_temp.txtを、実行したい外変のフォルダへコピーし、終了後、JWWのフォルダに書き戻す という処理を書き加えたものを、g_plus.batという名前で、JWWのフォルダに生成し、それを外変としてJWWのフォルダで実行する という様な具合の様です。 この為、実行したい外変のbatファイルは、最初から最後の行までbatファイルとして実行される(途中行の回避は可)、という前提の元でつくられており、 最終行がbatファイルとして実行されるようなつくりになっていないと、g_plusが末尾に追加する、jwc_temp.txt を書き戻す処理が行われず、結果、JWW側では 未実行 となります。 又、別言語のスクリプトをbatファイル内に埋め込んだような外変の場合、 末尾にbatファイルの文が追加されるわけですから、そこでもエラーが起こる可能性がありますので、それの対応も必要となります。 >C:/JWW/g_plus.bat:127: warning: parenthesize argument(s)for future version ... >C:/JWW/g_plus.bat:129: syntax error は、それが原因です。 これは、rubyが出しているエラーですが、G+が末尾に追加したbatファイル部分をrubyスクリプトとして読み込んだ為、構文エラーが出ました。 そこで、 接近した文字の連結 のbatファイルを、以下のように修正させていただいたところ、G+で動きましたので、参考まで。 ・ #!ruby -Ks の前の行(15行目)の exit -> goto end に変更 ・ 末尾に、以下の行を挿入 __END__ :end |
kojimaさん>有難うございます。 これでバッチリ処理できます。 LAさん>有難うございます。 何となく仕組みはわかってるんですが >最終行がbatファイルとして実行されるようなつくりになっていないと・・・ こういったあたりが解らないんですね >末尾にbatファイルの文が追加されるわけですから、そこでもエラーが・・・ このあたりも、解る人には簡単なんでしょうけど、よくわかりませんね。 >exit -> goto end に変更 >末尾に、以下の行を挿入 >__END__ >:end これ、前にこの掲示板で見たような、、、 書き換えたらうまくいきました。 |