確認ありがとうございます。
では、本体の方がダメなんでしょうか…。
置換文字列にワイド文字を混ぜると、処理はうまく
いかないし、終了時にエラーを起こします。
デバックも完全に行き詰りました。
↓長いですが、本体のスクリプトです。
#include "hspext.as"
#include "sub.hsp"
#define LIST_MAX 100000
#define BUF_MAX 64000
#define LINE_MAX 8000
#define DEFAULT_DIR "C:\\"
;以下定義必須(nullString "" でも可)
#define SOFTNAME "置換野郎"
#define VERSION "Ver 0.5β"
#define ETC_MSG "ありくい -all rights reserved"
;ここまで
goto *init
#module capMake
#defcfunc caption str t, str n, str v, str e
tmp = t : name = n : ver = v : etc = e
cap = tmp
cap = sub(cap,"%n",name)
cap = sub(cap,"%v",ver)
cap = sub(cap,"%e",etc)
return cap
#global
*init
title caption("%n -%v %e",SOFTNAME,VERSION,ETC_MSG)
gosub *GUI_build
sdim buf,BUF_MAX
fmask = "*.htm","*.html"
*main
;メインループ
stop
;========== "処理スタート!" ボタンのイベント ================================
*processing
notesel flistnote
sdim flist,LINE_MAX,notemax
repeat notemax
noteget flist(cnt),cnt
loop
foreach flist
;取り扱うファイルを読み込む
exist flist(cnt)
if strsize = -1 : continue
sdim file,strsize+32
bload flist(cnt),file,strsize
notesel file
;ファイル全行に置換処理i
repeat notemax
noteget buf,cnt
m = buf
buf = gsub(m,aim,alt)
noteadd buf,cnt,1
loop
;処理したバッファをセーブする
notesave flist(cnt)
wait 5
loop
dialog "Finish!"
goto *main
;==================================================================================
;********** "ディレクトリ選択" ボタンのイベント *******************************
*seldir
;;ファイル列挙は一階層下まで
;リスティングディレクトリ選択
selfolder dir,""
if stat = 1 : goto *main
;選択ディレクトリ内のファイルリストアップ
workdir = dir
gosub *htmlsearch
;子ディレクトリを検出
sdim subdir,LINE_MAX,1
sdim buf,BUF_MAX
dirlist buf,"*.*",5
if stat <= 2 : goto *seldirend
notesel buf : gosub *pathlong
notesave "test.txt"
repeat notemax
noteget subdir(cnt),cnt
loop
;子ディレクトリ内をリストアップ
foreach subdir
workdir = subdir(cnt)
gosub *htmlsearch
loop
*seldirend
objprm flistbox,flistnote
goto *main
*htmlsearch
;リストアップルーチン本体
if instr(workdir,0,"System Volume Information") != -1 : return
chdir workdir
foreach fmask
dirlist buf,fmask(cnt),3
notesel buf : gosub *pathlong
flistnote += buf
loop
return
*pathlong
;絶対パスに加工
sdim linebuf,LINE_MAX
repeat notemax
noteget linebuf,cnt
linebuf = workdir+"\\"+linebuf
linebuf = sub(linebuf,"\\\\","\\")
noteadd linebuf,cnt,1
loop
return
;***************************************************************************************
//////// "↑リスト初期化" ボタンのイベント /////////////////////////////////////////
*flistclear
objprm flistbox,""
goto *main
////////////////////////////////////////////////////////////////////////////////////////
*GUI_build
;;GUIビルド
;ウインドウ、フォント設定
screen 0,640,480
color 255,130,250 : boxf : color 0,0,0
font "MS ゴシック",16
objmode 2,1
objcnt = 0
dir = DEFAULT_DIR
;置換対象文字列
aimbox = objcnt
objcnt++
aim = ""
pos 20,20 : mes "置換する対象の文字列" : input aim,250,24
;置換後文字列
altbox = objcnt
objcnt++
alt = ""
pos 320,20 : mes "その代わりに置き換える文字列" : input alt,250,24
;ファイルリスト展示 --flistbox
flistbox = objcnt
objcnt++
sdim flistnote,LIST_MAX
pos 20,60
mes "選択ファイル"
mesbox flistnote,550,300,5
;制御ボタン
objsize 200,24
pos 20,390
button "ディレクトリ選択",*seldir
pos 300,390
button "↑リスト初期化",*flistclear
pos 160,430
button "処理スタート!",*processing
return