トップページ > コンテンツ > プログラミング入門 > UWSC入門 > UWSCの正規表現


上記サイトを参考にして、ファイルを別名でコピーし、
一部の文字列をreplaceを行うuwsファイルを書いてみた。

//----------------------------------
//ファイルのリネーム保存
//----------------------------------
file_src = input("コピーしたいファイルをドロップしてね")
file_name =  input("対象名を指定して下さい","テスト")
file_dst = replace(file_src,"XXXX",file_name)

dim fso = CreateOLEObj("Scripting.FileSystemObject")
fso.CopyFile(file_src,file_dst)

//----------------------------------
//ファイルの中身の修正
//----------------------------------
read_file = fopen(file_src,F_READ)
num_of_line = fget(read_file,-1)
write_file = fopen(file_dst,F_WRITE)
Pattern = "XXXX"

for i = 1 to num_of_line
   text_line = fget(read_file,i)
   fput(write_file,regReplace(text_line,Pattern,"test"))
next
fclose(read_file)
fclose(write_file)

//----------------------------------
//正規表現用関数
//----------------------------------
public regvb = CreateOLEObj("VBScript.RegExp")

Function regReplace(str,Pattern,replStr,IgnoreCase=true,Global=true)
    regvb.IgnoreCase = IgnoreCase
    regvb.Global = Global
    regvb.Pattern = Pattern
    str = regvb.Replace(str,replStr)
    Result = str
Fend


後日、関数にまとめる形で改造してみた。
また、JScript使ってみた。
//----------------------------------
//正規表現用関数(JScript)
//----------------------------------
public ScriptControl= CreateOLEObj("ScriptControl")
ScriptControl.language="JScript"
ScriptControl.addCode(js)

TEXTBLOCK js
function regReplace(str,Pattern,replStr) {
   var target = new RegExp(Pattern,"g");
   if(str.match(target)){
      var str = str.replace(RegExp.$1,replStr);
   }
   return str;
}
ENDTEXTBLOCK

//----------------------------------
//メイン処理
//----------------------------------
file_src = input("コピーしたいファイルをドロップしてね")
file_name =  input("対象名を指定して下さい","テスト")
file_dst = FileCopy(file_src,file_name)
FileChange(file_src,file_dst,"test4")

//----------------------------------
//ファイルのリネーム保存
//----------------------------------
Function FileCopy(file_src,file_name)
  dim fso = CreateOLEObj("Scripting.FileSystemObject")
  file_dst = replace(file_src,"XX-XX",file_name)
  fso.CopyFile(file_src,file_dst)
  result = file_dst
Fend

//----------------------------------
//ファイルの中身の修正
//----------------------------------
Procedure FileChange(file_src,file_dst,repl_str)
read_file = fopen(file_src,F_READ)
num_of_line = fget(read_file,-1)
write_file = fopen(file_dst,F_WRITE)
Pattern = "XXXX = \((.*)\)"

for i = 1 to num_of_line
   text_line = fget(read_file,i)
   fput(write_file,ScriptControl.run("regReplace",text_line,Pattern,repl_str))
next
fclose(read_file)
fclose(write_file)
Fend
最終更新:2013年07月09日 20:55