ruby -x %~f0 pause goto end #!ruby -Ks #data_mojiとdata_noをarray2(二重配列)に収集する。 def data_no_collect(data,i,array2,data_moji,no,hash,j) data_no=no+j array2<<[data_moji,data_no] i=data_next(data,i,data_moji,hash) return i end #data_mojiのバイト数の分だけiを次へ進める。 def data_next(data,i,data_moji,hash) if data_moji=="CDataMoji" f_i=data[i+83,1].unpack("C")[0] m_i=data[i+84+f_i,1].unpack("C")[0] m_byte=83+f_i+m_i+2 hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSunpou" f_i=data[i+145,1].unpack("C")[0] m_i=data[i+146+f_i,1].unpack("C")[0] m_byte=147+f_i+m_i+236 hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSolid" if data[i+5,2].unpack("S")[0] == 10 i += hash[data_moji]+4 else i += hash[data_moji] end elsif data_moji=="CDataTen" lc_change(data,i,data_moji)#線・円の場合は、$str_hに対応する線色に変更 if data[i+4,1].unpack("C")[0] == 100 i += hash[data_moji]+20 else i += hash[data_moji] end else lc_change(data,i,data_moji)#線・円の場合は、$str_hに対応する線色に変更 i += hash[data_moji] end return i end #線・円の場合は、$str_hに対応する線色に変更する def lc_change(data,i,data_moji) o_lt=data[i+4,1].unpack("C")[0] o_lc=data[i+5,2].unpack("S")[0] if $str_h.key?([o_lt,o_lc]) n_lt,n_lc=$str_h[[o_lt,o_lc]] data[i+4,3]=[n_lt,n_lc].pack("CS") end end File.open("線種線色変更.txt","w"){|f| f.puts "以下に検索線種,検索線色Tab置換線種,置換線色 の記載をしてください 複数可です" f.puts "SXF線種2は32 ユーザー定義線種17は47 SXF線色2は102 ユーザー定義線色17は117です" f.puts "記載例 47,117 2,1" } system("notepad 線種線色変更.txt") $str_h={} File.open("線種線色変更.txt","r"){|f| while f.gets xy=$_.chomp.split("\t") if f.lineno > 3 && $_.chomp != "" o_lt,o_lc=xy[0].split(",") n_lt,n_lc=xy[1].split(",") $str_h[[o_lt.to_i,o_lc.to_i]] = [n_lt.to_i,n_lc.to_i] end end } time1=Time.new path=Dir.pwd file_a=(Dir.entries(path)).select{|item|item=~/\.jww$/} file_a2=[] file_a.each{|file| base_name = $` if file =~ /\.jww$/ new_file_neme = base_name+"_2"+".jww" n=1;new_file_neme = base_name+"_2"*n+".jww" while file_a.include?(new_file_neme) or file_a2.include?(new_file_neme) new_file_neme = base_name+"_2"*n+".jww" n += 1 end file_a2<700 puts "バージョンNO#{b_n}には対応していません。パスします";next end #◎メモ欄の記載文 memo_byte=data[i,1].unpack("C")[0] i += 1+memo_byte #◎図面サイズ i += 4 #◎レイヤグループ・レイヤ状態 i += 4 0.upto(15){|i1|i += 4;i += 4;i += 8;i += 4 0.upto(15){|i2|i += 4;i += 4} } #◎ダミー(54バイト) i += 14*4#ダミー #◎寸法関係の設定 i += 4;i += 4;i += 4;i += 4;i += 4 i +=4#◎ダミー #◎線描画の最大幅 i += 4 #◎プリンタ出力範囲の原点 i += 8;i += 8 #◎プリンタ出力倍率 i += 8 #◎プリンタ90°回転出力、プリンタ出力基準点位置 i += 4 #◎目盛設定モード i += 4 #◎目盛表示最小間隔ドット i += 8 #◎目盛表示間隔(X,Y) i += 8;i += 8 #◎目盛基準点(X,Y) i += 8;i += 8 #◎レイヤ名・レイヤグループ名 0.upto(15){|i1| 0.upto(15){|i2|byte=data[i,1].unpack("C")[0];i += byte+1} } 0.upto(15){|i1|byte=data[i,1].unpack("C")[0];i += byte+1} #◎日影計算の条件 i += 8;i += 8;i += 4;i += 8 #◎天空図の条件 i += 8;i += 8 #◎2.5Dの計算単位(0以外はmm単位で計算) i += 4 #◎保存時の画面倍率(読込むと前画面倍率になる) i += 8;i += 8;i += 8 #◎範囲記憶倍率と基準点(X,Y) i += 8;i += 8;i += 8 #◎マークジャンプ倍率、基準点(X,Y)およびレイヤグループ if b_n>=300 1.upto(8){|i1|i += 8;i += 8;i += 8;i += 4} else 1.upto(4){|i1|i += 8;i += 8;i += 8 } end #◎文字の描画状態(Ver.4.05以降) if b_n >=300 i += 8#ダミー i += 8#ダミー i += 8#ダミー i += 4#ダミー i += 8#ダミー i += 8#ダミー if b_n <404 i += 8#ダミー i += 4#ダミー else i += 8 i += 4 end end #◎複線間隔 0.upto(9){|i1|i += 8} #◎両側複線の留線出の寸法 i += 8 #◎色番号ごとの画面表示色、線幅 0.upto(9){|i1|i += 4;i += 4} #◎色番号ごとのプリンタ出力色、線幅、実点半径 0.upto(9){|i1|i += 4;i += 4;i += 8} #◎線種番号2から9までのパターン、1ユニットのドット数、、プリンタ出力ピッチ 2.upto(9){|i1|i += 4;i += 4;i += 4;i += 4} #◎ランダム線1から5までのパターン、画面表示振幅・ピッチ、プリンタ出力振幅・ピッチ 1.upto(5){|i1|i += 4;i += 4;i += 4;i += 4;i += 4} #◎倍長線種番号6から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ 6.upto(9){|i1|i += 4;i += 4;i += 4;i += 4} #◎実点を画面描画時の指定半径で描画 i += 4 #◎実点をプリンタ出力時、指定半径で書く i += 4 #◎BitMap・ソリッドを最初に描画する i += 4 #◎逆描画 i += 4 #◎逆サーチ i += 4 #◎カラー印刷 i += 4 #◎レイヤ順の印刷 i += 4 #◎色番号順の印刷 i += 4 #◎レイヤグループまたはレイヤごとのプリンタ連続出力指定 i += 4 #◎プリンタ共通レイヤ(表示のみレイヤ)のグレー出力指定 i += 4 #◎印刷時における既定線色の線幅の基準値の「dpi」 i += 4 #◎作図時間(Ver.2.23以降) i += 4 #◎2.5Dの始点位置が設定されている時のフラグ(Ver.2.23以降) i += 4 #◎2.5Dの透視図・鳥瞰図・アイソメ図の視点水平角(Ver.2.23以降) i += 4;i += 4;i += 4 #◎2.5Dの透視図の視点高さ・視点離れ(Ver.2.23以降) i += 8;i += 8 #◎2.5Dの鳥瞰図の視点高さ・視点離れ(Ver.2.23以降) i += 8;i += 8 #◎2.5Dのアイソメ図の視点垂直角(Ver.2.23以降) i += 8 #◎線の長さ指定の最終値(Ver.2.25以降) i += 8 #◎矩形寸法の最終値(Ver.2.25以降) i += 8;i += 8 #◎円半径指定の最終値(Ver.2.25以降) i += 8 #◎ソリッドを任意色で描くフラグ・任意色の規定値(Ver.2.30以降) i += 4;i += 4 #◎SXF対応拡張線色定義拡張 0.upto(256){|i1|i += 4;i += 4} 0.upto(256){|i1|lcn_byte=data[i,1].unpack("C")[0];i += 1+lcn_byte;i += 4;i += 4;i += 8} #◎SXF対応拡張線種定義拡張 0.upto(32){|i1|i += 4;i += 4;i += 4;i += 4} 0.upto(32){|i1| ltn_byte=data[i,1].unpack("C")[0];i += 1+ltn_byte;i += 4 1.upto(10){|i2|i += 8} } #◎文字種1〜2までの文字幅・高さ・間隔・色番号 1.upto(10){|i1|i += 8;i += 8;i += 8;i += 4} #◎書込文字の幅・高さ・間隔・色番号・文字番号 i += 8;i += 8;i += 8;i += 4;i += 4 #◎文字位置の行間 i += 8 #◎文字位置の文字数 i += 8 #◎文字基準点ズレ使用のフラグ i += 4 #◎文字基準点横方向のズレ i += 8;i += 8;i += 8 #◎文字基準点縦方向のズレ i += 8;i += 8;i += 8 #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)の総数 int=data[i,2].unpack("S")[0] if int==255*256+255 i += 2 n2=data[i,4].unpack("L")[0] i += 4 else n2=data[i,2].unpack("S")[0] i += 2 end puts "#{file}の図形総数:#{n2}" #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)のデータNOの検出 hash={"CDataSen"=>47,"CDataTen"=>35,"CDataEnko"=>75,"CDataSolid"=>79,"CDataBlock"=>59} data_moji="";array2=[];no=0;j=0 while no"部分図(数学座標系)","2"=>"部分図(測量座標系)","3"=>"作図グループ","4"=>"作図部品"} bl_list_i=data.index("CDataList") if bl_list_i no += 1;list_no=no+j bl_l_n=data[i,2].unpack("S")[0] i += 17 bl_l_no=0 while bl_l_no=0 time=data[i,4].unpack("L")[0] i += 4 name_byte=data[i,1].unpack("C")[0] i += 1+name_byte else i += 4 i += 8 name_byte=data[i,1].unpack("C")[0] i += 1+name_byte end w=data[i,2].unpack("S")[0];i += 2 if w==256*255+255 l=data[i,4].unpack("L")[0];i += 4; z_n=l else z_n=w end z_no=0 while z_no127*256+255 i += 2;i += 4 else i += 2 end end end else i += 2 end array2.each{|item|print "#{item[0]}のNO:#{item[1]} "} puts "" open(new_file_neme,"wb"){|f|f.write data} puts "#{file}のコピー #{new_file_neme}を作成しました","" rescue puts "#{file}でエラーが発生しました パスします" puts $! end } time2=Time.new puts "開始時間:#{time1}","終了時間:#{time2}" __END__ :end