技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

サクラエディタのマクロ(置換処理記述)をバッチから並列実行すると処理が競合する

サクラエディタの Ver2.2.0.1 にて表題の挙動を確認したので、記録に残しておきます。
 
【再現手順】
1.大量(確認時は1000個)の置換処理をマクロに記載する。

S_ReplaceAll('hoge1000', 'fuga1000', 62); // すべて置換
S_ReplaceAll('hoge999', 'fuga999', 62); // すべて置換
S_ReplaceAll('hoge998', 'fuga998', 62); // すべて置換



S_ReplaceAll('hoge3', 'fuga3', 62); // すべて置換
S_ReplaceAll('hoge2', 'fuga2', 62); // すべて置換
S_ReplaceAll('hoge1', 'fuga1', 62); // すべて置換
S_ReDraw(0); // 再描画
FileSave( ); // 上書き保存
WinClose( ); // 閉じる
 
2.1で作成したマクロを以下の記事の要領でバッチから起動可能にする。
サクラエディタのマクロをバッチファイルで複数ファイルに対して実行
https://akira2kun.hatenablog.com/entry/2018/09/16/103138
 
3.処理対象のファイルを用意する
上記記事の例で言うと、
workフォルダ内に置換対象の文字を含むファイルを格納する。

hoge1000
hoge999
hoge998



hoge3
hoge2
hoge1
 
4.2~3のフォルダ構成を複数作成する。
上記記事の例で言うと、tmpフォルダをコピーしtmp2フォルダを作成する。
(バッチファイルの1行目・5行目の記述もフォルダ名に合わせて変更する)
 
5.4の各々のフォルダで同時にバッチファイルを起動させる。
 
6.workフォルダ内のファイルを開き、競合の発生を確認する。

fuga1000
fuga999
fuga998



fuga3
fuga2
fuga1
とならず、「hoge951」が「fuga920」になる等不正な結果になる。