リストで置換マクロ
現在開いているドキュメントを対象に、 外部のタブ区切りテキストファイルを読み込み一斉に正規表現の置換を行います。
タブ区切りテキストファイルの書式は下記の通り。
検索文字列 置換文字列
タブが無い行の場合は処理をスキップします。
置換文字列を空(*1)にしたい場合は、検索文字列の後にタブを入れるだけでOKです。
また、改行がCR+LFでない場合はおそらく正しく動作しません。(*2)
下記コードを任意の名前でマクロフォルダに保存し、実行してください。
デリミタをタブ以外の文字列に変更したい場合は2行目のdelimiterの値を任意に変更してください。
また、置換リストを閉じられで困るという方は25行目のdocument.close();をコメントアウト、もしくは削除をしてください。
■replace.jsee var text = getData(); var delimiter = "\t"; if(text == "")Quit(); data = text.split("\n"); for(var n in data){ if(data[n].indexOf(delimiter) == -1)continue; replace = data[n].split(delimiter); //タブで区切られていないとき対策 if ((replace.length < 2) || (replace[0] == "")) continue; if(replace[1].indexOf("\r") != -1){ len = replace[1].length - 1; }else{ len = replace[1].length; } document.selection.Replace(replace[0],replace[1].substring(0,len),eeFindNext | eeReplaceAll | eeFindReplaceRegExp); } document.HighlightFind=false; function getData() { var curdoc = document; var numDocs = editor.Documents.Count; editor.ExecuteCommandByID(4097); if (curdoc == document) { return ""; } document.selection.SelectAll(); text = document.selection.Text; document.selection.Collapse(); //置換リストがすでに開かれているときは閉じない if (numDocs < editor.Documents.Count) document.close(); curdoc.Activate(); return text; }
2chスレ Emeditor Part10の740氏の要望により作成。
以後いろいろな方の助言を元に修正をしたりしています。
色んなバージョンができてしまったので今後はwikiの方で管理していきます。
そんなにJscript得意ではないので、ツッコミ等ありましたらよろしくお願いいたします
tommy T
Changelog
2006-05-08 01:55
初版作成
- タブで区切られていないとき対策を施した -- 名無し
- 置換リストがすでに開かれているときは閉じないようにした -- 名無し
- eeFindReplaceRegExpがあるから、eeFindReplaceEscSeqはなくてもいいんじゃないかな? --
- 検索置換ダイアログだと、正規表現にチェックをいれたときはエスケープシーケンスがグレイアウトするし。 --
- 改行コードの件ですがString.splitは正規表現も使えるので text.split(/\r\n|\r|\n/); にすればいいかと思います(未検証)。 --
- eeFindReplaceEscSeqは不要ですね。自動でマクロ記録の産物ですw -- tommy T
- 改行コードですが、パっとみうまくいかなかったので\n一本でやってます。 -- Tommy T
- 名無しさん、編集ありがとうございました。勉強になります。 -- tommyT
- 新しいバージョンでこのマクロが動きませんなぜでしょう?? -- ころ太 (2010-04-03 12:45:35)
- var replaceFile = "c:\\痴漢.txt"\nvar ForReading = 1;\nvar fso = new ActiveXObject("Scripting.FileSystemObject");\nvar f = fso.OpenTextFile(replaceFile, ForReading);\ndocument.selection.SelectAll();\nvar text = document.selection.Text;\nwhile (!f.AtEndOfStream) {\nvar r = f.ReadLine();\nvar arr = r.split("\t");\nif (arr.length > 1) {\ntext = text.replace(new RegExp(arr[0], "g"), function () {\nreturn arr[1];\n});\n}\n}\ndocument.selection.Text = text;\nf.Close();\n -- ごう (2010-05-06 18:06:18)
-
スイマセン。見づらくわかりづらいです。どなたか整理してください。 -- 名無しさん (2011-08-04 23:51:58)