Notepad ++:バッチテキスト置換を実行


0


オンラインで見つけたいくつかのWebページから辞書ファイルを作成しようとしています。辞書は、検索モードで簡単に見つけられるように見出し語にインデックスを付けます。Webページの情報は、一意のIDを持つセクションに分割されます。例: <div id="word-2857">Andronicus, Titus . . .
問題は、他のテキストに次のように書かれた他の単語への参照リンクがあることです。<a href="#word-2857"><i>see Titus Andronicus</i></a>

したがって、辞書ファイルを作成する場合(Goldendict用)、他の単語への参照は次のように記述する必要があります。 <a href="entry://headword">text to display</a>

アンドロニカスの代わりにワード2857の見出し語を作成するので、タイタス​​は(最終的に)すべての単語(約10,000個)のリンクのバッチ置換を実行することはあまり役に立ちません。つまり、すべてのIDリンクを対応する見出し語に置き換えたいということです。<a href="#word-2857"><i>see Titus Andronicus</i></a>になるはずです<a href="entry://Andronicus, Titus">see Titus Andronicus</a>

置換したいすべての単語のリストをすでに持っています。問題は、Notepad ++を使用すると、一度に1つの一意の置換しか実行できないことです。10,000以上の単語があり、これには時間がかかりすぎます。これを簡単に行う方法を説明してください。

ありがとう


参照リンクは常に同じ構造を持っていますか?(あなたが望むものは常に「LastWord、FirstWord」であり、そこにあるものは常に「FirstWord LastWord」を参照してください。特定の構造がある場合、正規表現で行うことができます。構造を知る必要があります。 2つまたは3つの異なる構造、考えられるすべての構造
ネイト14

または、置換前後のリストがある場合は、すべてをExcelにコピーし、VBAスクリプトを実行してコピーします。私もそれを手伝うことができます。簡単なオプションかもしれません。
ネイト14

ありがとう。私はExcel VBAに精通していますが、しばらく触れていません。スクリプトが役立ちます!
user47181 14

回答:


0

これが私の解決策です。すべてのものをNotepad ++から新しいExcelブックにコピーします。Sheet1にある必要があります。Sheet2の列Aにリストされているすべての「検索」項目をコピーします。Sheet2の列Bに一致する「置換」アイテムを配置します。Sheet2はヘッダー値も検索および置換するため、Sheet2にはヘッダーがありません(次のコードの範囲「r」をA2から開始するように変更しない限り)。

次のスクリプトを実行します。

Sub FindReplaceAll()
Dim FindString, ReplaceString As String
Dim r As Range

Set r = Sheet2.Range("A1")

Do While Not r.Value = 0
    FindString = r.Value
    ReplaceString = r.Offset(0, 1).Value

    Sheet1.Cells.Replace What:=FindString, Replacement:=ReplaceString, LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Set r = r.Offset(1, 0)
Loop

MsgBox "Done!"

End Sub

これにより、すべてのエントリが1つずつ検索および置換されます。完了したら、Notepad ++にコピーして戻すことができます。最初の空の行で停止するので、行が連続していることを確認/置換してください。

Excelマクロ/スクリプトでさびている場合は、ExcelでAlt + F11を押し、左側のツリーでVBAProjectを右クリックし、[挿入]> [モジュール]を選択します。表示される新しいボックスにコードを貼り付け、再生ボタン(F5)を押します。

これがお役に立てば幸いです!


ご存知のように、Excelがクラッシュしたように見えるかもしれませんが、プロセスを強制終了する数分前に(たとえば、わかりません。1分から30分かかることがあります)。10,000個のアイテムがあり、毎回交換する必要があります。
ネイト14

うまくいきましたが、時間がかかります!!
user47181 14

1
あなたは追加する必要がありますApplication.Calculation=xlManualし、Application.ScreenUpdating = Falseあなたのコードの先頭にし、Application.Calculation=xlAutomaticそしてApplication.ScreenUpdating=Trueあなたのコードの最後に。これにより、計算時間が大幅に改善されます。計算とワークシートとの対話がExcel VBAの最大のボトルネックであることを思い出してください。
エクセル14

私は何かに気づいた:それはすべての可能なマッチを置き換える置き換えではありません。すべてを完全に置き換える前に、チャンクごとに貼り付ける必要があります。たぶん、Excelが配列と比較する方法です。回避策はありますか?
user47181 14

チャンクごとに貼り付けるとはどういう意味ですか?空の行がないことを確認していますか(具体的には、列aに空のセルがないこと)?
ネイト14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.