設定ファイル操作3

作成理由

  • 設定ファイル操作を使いやすくなるように、ただいま改善中。

改善点

  • jwf読込みとレイヤ名読込みをワンステップで行いたい。
    • レイヤ名読込みを独立した外部変形としてキーに割り当てsendkeysで呼び出すよう変更。
  • jw01.jwfなどjwfファイルの名前から読み込む操作を残す。

外部変形

@rem 設定ファイル操作
@echo off
REM #jww
REM #cd
goto %1
REM #hc【設定ファイル操作】 ボタンを選択して下さい。
REM #hm【設定ファイル操作】 |jwf書出し[L]|jwf読込み[R]|jwl書出し|jwl読込み|jw01.jwf|jw02.jwf|jw03.jwf|jw04.jwf|jw05.jwf|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #:7
REM #:8
REM #:9
REM #hf
REM #e

:1
:2
copy jwc_temp.txt jwc_temp.bak
"C:\Program Files (x86)\Hidemaru\hidemaru.exe" /xseljwf.mac file.txt
start ruby -Ks -x %~f0 %1
goto END
:3
:4
copy jwc_temp.txt jwc_temp.bak
"C:\Program Files (x86)\Hidemaru\hidemaru.exe" /xseljwl.mac file.txt
start ruby -Ks -x %~f0 %1
goto END
:5
:6
:7
:8
:9
copy jwc_temp.txt jwc_temp.bak
ruby -Ks -x %~f0 %1
goto END

:COMENT
設定ファイルの読込み、書出しをします。
【jwf書出し】:jwfファイルを書出します
【jwf読込み】:jwfファイルを読込みます
【jwl書出し】:jwlファイルを書出します
【jwl読込み】:jwlファイルを読込みます。
【jw01.jwf 】:jw01.jwfを読込みます。
【jw02.jwf 】:jw02.jwfを読込みます。
【jw03.jwf 】:jw03.jwfを読込みます。
【jw04.jwf 】:jw04.jwfを読込みます。
【jw05.jwf 】:jw05.jwfを読込みます。
~
#! ruby -Ks

$stderr=open("error.txt","w")
$stdout=open("jwc_temp.txt","w")

opt=ARGV[0].to_i

if opt>=5
  jwf="jw0#{opt-4}.jwf"
  unless FileTest.file?(jwf)
    puts "he #{jwf}が見つかりません"
    exit
  end
  a=[]
  open(jwf).read.each_line{|e|
    if /^LAYNAM_[0-9A-F]/=~e
      a << e.chomp.gsub(%r|^[^=]*=|,"").gsub(","," ,")
        .gsub(%r|,$|,", ").split(",").map{|e| e.gsub(%r| $|,"")}
    end}
  a.each_with_index{|e,i| e.each_with_index{|f,j|
      if j==0
        puts "lg"+i.to_s(16)+" 11"
        puts "lgn"+f
      else
        puts "ly"+(j-1).to_s(16)+" 11"
        puts "lyn"+f
        puts "ly0 11" if j==16
      end}}
  open("jwc_temp.bak").readlines.each{|e|
    if /^hq/=~e
      puts "h# #{jwf}を読み込みました"
    else
      puts e.chomp
    end}
  exit
end

require 'win32ole'

unless FileTest.file?("file.txt")
  puts "he file.txtが見つかりません"
  exit
end

shell = WIN32OLE.new("WScript.Shell")
shell.AppActivate("jw_win");sleep(0.3)
if opt==1
  shell.Sendkeys("%sfw");sleep(0.3)
  shell.Sendkeys("^v%sy+a");sleep(3)
  file=open("file.txt").read.chomp
  s=open(file).read.encode(Encoding::SJIS,invalid: :replace,undef: :replace)
  f=open(file,"w")
  f.print s
elsif opt==2
  shell.Sendkeys("%sfr");sleep(0.3)
  shell.Sendkeys("^v%o^+l");sleep(0.3)
elsif opt==3
  shell.Sendkeys("%sfw");sleep(0.3)
  shell.Sendkeys("^v%sy+a");sleep(0.3)
elsif opt==4
  shell.Sendkeys("%sfr");sleep(0.3)
  shell.Sendkeys("^v%o+a");sleep(0.3)
end

__END__
:END
@rem レイヤ名読込み
@echo off
REM #jww
REM #cd
REM #hf
REM #e

copy jwc_temp.txt jwc_temp.bak
ruby -Ks -x %~f0 %1
goto END

:COMENT
jwfファイル読込み後にレイヤ名を読込みます
~
#! ruby -Ks

$stderr=open("error.txt","w")
$stdout=open("jwc_temp.txt","w")

opt=ARGV[0].to_i

unless FileTest.file?("file.txt")
  puts "he file.txtが見つかりません"
  exit
end

file=open("file.txt").read.chomp
a=[]
unless FileTest.file?(file)
  puts "he #{file}が見つかりません"
end
open(file).read.encode(Encoding::SJIS,invalid: :replace,undef: :replace).
  each_line{|e|
    if /^LAYNAM_[0-9A-F]/=~e
      a << e.chomp.gsub(%r|^[^=]*=|,"").gsub(","," ,")
        .gsub(%r|,$|,", ").split(",").map{|e| e.gsub(%r| $|,"")}
    end}
a.each_with_index{|e,i| e.each_with_index{|f,j|
    if j==0
      puts "lg"+i.to_s(16)+" 11"
      puts "lgn"+f
    else
      puts "ly"+(j-1).to_s(16)+" 11"
      puts "lyn"+f
    end}}
open("jwc_temp.bak").read.each_line{|e|
  if /^hq/=~e
    puts "h# レイヤ名を読み込みました"
  else
    print e
  end
 }

__END__
:END

秀丸マクロ(再掲)

  • マクロの置き場所は「その他→動作環境→パス」タブの「マクロファイル用のフォルダ」で設定できます。
//seljwf.mac

openfile "*.jwf";
$fl=filename;
setclipboard $fl;
#hwnd=hidemaruhandle(0);
if(linecount==1)insert "\n";
save;
setactivehidemaru findhidemaru("file.txt");
closehidemaruforced #hwnd;
selectall;delete;insert $fl;save;quit;
//seljwl.mac

openfile "*.jwl";
$fl=filename;
setclipboard $fl;
#hwnd=hidemaruhandle(0);
replaceallfast "PRTCT_CH.*","PRTCT_CH =  1 ",regular;
if(linecount==1)insert "\n";
save;
setactivehidemaru findhidemaru("file.txt");
closehidemaruforced #hwnd;
selectall;delete;insert $fl;save;quit;

jw_win.jwfの修正

  • 今回はctrl+Lに設定ファイル操作.bat、ctrl+shift+Lにレイヤ名読込み.batを割り当ててます
  • jw_win.exeと同じフォルダにjw_win.jwfを準備します。
  • GCOM_111に設定ファイル操作.BATを設定します。
  • GCOM_161にレイヤ名読込み.BATを設定します。
  • 詳細はSample.jwfを参照して下さい。
#jw_win.jwf(一部抜粋、例)
GCOM_100 =,,,,,,,,,,
GCOM_110 =,設定ファイル操作.BAT,,,,,,,,,C:\jww\bat
GCOM_120 =,,,,,,,,,,
GCOM_130 =,,,,,,,,,,
GCOM_140 =,,,,,,,,,,
GCOM_150 =,,,,,,,,,,
GCOM_160 =,レイヤ名読込み.BAT,,,,,,,,,C:\jww\bat
GCOM_170 =,,,,,,,,,,
GCOM_180 =,,,,,,,,,,
GCOM_190 =,,,,,,,,,,

コメント