秀丸マクロで能率的なテーブル置換は可能?

このQ&Aのポイント
  • DOSの「SED」でできるテーブル置換と同様のことを、「秀丸」マクロを使って、能率的にできないかと考えています。
  • 上記のような3行程度の命令ならいいのですが、命令行が100行とか200行とか長くなると、能率の問題が出ます。「SED」はほとんど能率は落ちませんが、「秀丸」マクロは1行1行置換していくため、たいへん能率が落ちてしまいます。
  • 大量の語句をすばやく一括置換できればいいので、かならずしも「秀丸」マクロにはこだわりません。
回答を見る
  • ベストアンサー

秀丸マクロで能率的なテーブル置換は可能?

DOSの「SED」でできるテーブル置換と同様のことを、「秀丸」マクロを使って、能率的にできないかと考えております。 たとえば、「目」「鼻」「口」を「め」「はな」「くち」に置換したい場合、「SED」では --- s/目/め/g s/鼻/はな/g s/口/くち/g --- という置換テーブルを作って、コマンドを実行すれば成功します。「秀丸」でも、 --- replaceall "目" , "め" , regular, nocasesense; replaceall "鼻" , "はな" , regular, nocasesense; replaceall "口" , "くち" , regular, nocasesense; --- のようなマクロを作って実行すれば、一応同様の結果が得られます。 ところが、上記のような3行程度の命令ならいいのですが、命令行が100行とか200行とか長くなると、能率の問題が出ます。「SED」はほとんど能率は落ちませんが、「秀丸」マクロは1行1行置換していくため、たいへん能率が落ちてしまいます。能率よく置換できるマクロ記述方法がないものか、ご教示いただければ幸いです。 なお、私はこのような大量の語句置換をする必要がしばしばあり、昔からDOSで「SED」を使っていました。ところが、Windows Vistaを使うようになってから、Vistaでも以前のOSでも同じように動く「SED」の日本語版が見当たらないため、ついに「SED」の使用を断念しました。「秀丸」のマクロがその代わりになるかと思いましたが、能率の点で不満があります。つまりは、大量の語句をすばやく一括置換できればいいので、かならずしも「秀丸」マクロにはこだわりません。どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

んー標準的な仕様からすると、{ じゃなくて \{ のほうが規格に沿っているんですけどね。 まあMS-DOS用の sed ということでしたら規格が固まる前のものでしょうし、 作者が独自に拡張したりしてますしね。 置換を効率よく、というのが高速にという意味であれば せいぜい画面の書き換えをoffにして置換を行うぐらいしかないのではないでしょうか。 秀丸のマクロでは文字列を対象にした置換というのはできないようですし。 別のツールを使うという方向では Download: Windows > ユーティリティ > テキストファイル用 > テキスト変換 http://www.vector.co.jp/vpack/filearea/win/util/text/conv/ にあるようなツールはもう試されてますか?

hero-archy
質問者

お礼

ありがとうございます。試してみたいツールがけっこうあります。「TextSS」などは以前使っていましたが、遠ざかっていました。しかし、今見ると、Vistaに対応するテキスト変換ソフトも多く出てきたようですね。 お話では、秀丸マクロだけで置換を行うのにはやはり限界がありそうなので、腹をくくって、テキスト変換ファイルの利用を考えてみたいと思います。秀丸でなんとかなるんじゃないかと未練があり、ご質問をした次第ですが、すっきりしました。ありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

http://www.kt.rim.or.jp/~kbk/sed/ xpまでは動作確認されてるみたいですがvistaではだめだったりしますか?

hero-archy
質問者

補足

ご紹介のSEDを含めて数種類試してみました。ご紹介のものはVistaでも動作しましたが、正規表現の方式が以前と若干違っていて、以前作ったSEDスクリプトが使えなかったりします(たとえば、“{”を“\{”にしなければならなくなった等)。新旧のOSで同一のSEDスクリプトを共有できず、SEDスクリプトを人にあげる場合などにトラブルを生じかねないので、いっそSEDはやめようと思いました。 この「人にあげる場合」というのが、私にとってけっこう重要です。私の周りには、そもそもDOSを扱える人自体が少なくなってきました。そんなこともあって、秀丸マクロ(秀丸なら周囲も使っています)で同じぐらいの能率で作業ができれば、と考えたわけです。

関連するQ&A

  • 秀丸の置換

    いつもお世話になっています。 秀丸の置換でいろいろ検索したのですが、どうしても わからなくて質問させていただいています。 というか、私のやりたいことができるのかどうかも 不安なところなのですが・・・・(汗) 添付の画像のように2行の空白の改行の後に文章がはじまります。 その文章の始まりに●を入れたいのですが、マクロか置換で やり方はあるでしょうか?

  • 秀丸マクロで、あらかじめ選択した範囲にのみ処理を適用するには

    秀丸マクロで、あらかじめ選択した範囲にのみ処理を適用するには どのように書けばよいのでしょうか? 具体的には replaceall "あああ" , "いいい"; のような置換処理を、 現在開いているファイルの選択範囲にのみ適用したいと考えています。 意味不明でしたら加筆修正しますのでよろしくお願いします。

  • 正規表現の置換で、カンマで区切られた語句を""と改行で分ける方法

    正規表現による置換についてお教えください。 Unixのコマンドで置換するときに、sed コマンドを使うと思います。 今、プログラムのソースコードの中に含まれている語句を取得するために、色々いじろうと思っています。 私が最もお聞きしたいのは、正規表現の書き方であることを、まずご理解ください。 ソースコードの中に、 string headline="語句1,語句2,・・・,語句n-1,語句n"; というように、 string headline= で始まっていて、 その後に " "(ダブルクォーテーションの組)で囲まれた部分が1箇所あり、 その部分に、カンマ(,)で区切られた語句がいくつもあるような行があったとき、 その " "の部分を、 "語句1", "語句2", ・・・ "語句n-1", "語句n" のように置換したいのです。 つまり、語句一つ一つをダブルクォーテーションで包んで、1行に語句が1つになるようにしたいのです。 厳密に言えば、stringとheadlineの間などに、タブや空白がいくつあるかわからないという問題なども考える必要があるかもしれません。 とりあえず私が考えたのは、 s/\(string headline="\)\([^,]\)+,\(";\)/\1\2",改行"\3/g です。 s/置換前の文字列のパターン/置換後の文字列のパターン/g となっています。 置換前のパターンで \( \) で囲まれている部分は、置換後のほうで、\1のように参照できます。 ■■でも、私の書いたものって、語句が繰り返し出現することに対応できていないように思われます。■■ 実際に、置換に改行を含めるには、正規表現をファイルの中に書いて、sedの-fオプションで読み込ませることになると思います。 string headline=" " という形をしていないものは、たとえ、" " の中がカンマで区切られていてもそれを分けません。

  • 秀丸マクロをハイライトするマクロ

    htmlタグで秀丸マクロをハイライトするマクロを作っています。 強調表示のファイルを見ながら作っています。 「if」 「else if」 「else」を上手に区別する正規表現方法を教えてください。 また、このようなマクロを作るときに役立ちそうな方法がありましたら教えてください。 このようなソースを if (条件式1) message "コメント1"; else if (条件式2) message "コメント2"; else if (条件式3) message "コメント3"; else message "コメント4"; このようにhtmlタグを付けていきます。 <span class="if">if</span> (条件式1) <span class="message">message</span> "コメント1"; <span class="else_if">else if</span> (条件式2) <span class="message">message</span> "コメント2"; <span class="else_if">else if</span> (条件式3) <span class="message">message</span> "コメント3"; <span class="else">else</span> <span class="message">message</span> "コメント4"; マクロはこんな感じです。 setcompatiblemode 0x0F; begingroupundo; replaceall "message" , "<span class=\"message\">message</span>" , regular, word; replaceall "if" , "<span class=\"if\">if</span>" , regular, word; replaceall "else_if" , "<span class=\"else_if\">else_if</span>" , regular, word; replaceall "else" , "<span class=\"else\">else</span>" , regular, word; if( ! result ) beep; endgroupundo 1; endmacroall; 単語の検索 http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_WordSearch.html 検索(Ver8.04対応版) http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/070_Env_Search.html

  • 秀丸 事前にリストを作って一括変換したい

    秀丸(Ver8.10)(OSはWindowsXP)を使っています。テキスト中の文字列を別の文字列に1つずつ置換することはできますが、多数ある場合は1つ1つ置換するのは大変です。変換する文字列の組のリストを事前に作成しておいて一括変換することはできないでしょうか。 (例) 変換前 ------------>変換後 I0001_01010 --------> I0001_00011 I002_1111 ----------> J00002_0110123 I0003_03234 --------> I005_012 : : (以下多数あります) (変換の法則性はありません) (変換する文字列はその都度変わりますので再実行や保存の必要はありません) (今は以下のようにreplaceallをマクロに記述して変換していますがもっと簡単に行える方法はないでしょうか) replaceall "I0001_01010" , "I0001_00011" , nohilight; replaceall "I002_1111" , "J00002_0110123" , nohilight; replaceall "I0003_03234" , "I005_012" , nohilight; よろしくお願いします。

  • 秀丸のマクロでいちいち表示を更新しないためには

    秀丸についてお教えください。 テキストファイルに、改行なく、文字がべたべたべた・・・と、 何万文字も入っています。 1行1文字にしたいので、右矢印キーとエンターキーを繰り返したいと思っています。 (なぜ置換を使わないのか、の説明は省きます。) マクロを使って、下記のような感じにすればいいと思っています。 #a = 100000; while(#a > 0){ right; insertreturn; #a = #a -1; } ですが、これを実行すると、いちいち表示を更新してくるため、遅いです。 私としては、「全置換」の「一気」の「スピードアップ」みたいに、 サササーッ という具合にやりたいのですが、どうすればよいでしょうか。 また、ついでに聞きますが、 上記のマクロで、100000のように数を指定しないで、「ファイルの終わりまで」みたいにやるにはどうすればよいでしょうか。

  • sedでカンマ区切りの列の置換を行いたい

    以下の様なファイルがあります。 sedコマンドを使用して、カンマで区切られたn番目のカラム目を 置換したい場合どうすればよいでしょうか。 "1","2","3","4","5","6" "1234","12","34567","abcd","efg","hi" "a c","d f","12 34","0","AAA","" "g i","j l","45 67","0","BBB","2021" "m o","p r","3 2 1","1","ABC","" "123","456","","abc","efg","hij" ①1カラム目以外置換(1カラム目以降削除) sed 's/\(.*\),.*,.*,.*,.*,.*/\1/g' test.csv ②最後の6カラム目以外置換(6カラム目以外削除) sed 's/.*,.*,.*,.*,.*,\(.*\)/\1/g' test.csv ③3カラム目を置換(3カラム目を「""」だけにしたい) sed -e 's/\(.*\),\(.*\),.*,\(.*\),\(.*\),\(.*\)/\1,\2,"",\3,\4,\5/g' test.csv とできたのですが、 表現がないというか、置換対象文字列の条件、表現が長いというか、全カラムを指定しているので、 少し、短くできないものでしょうか。 ①パターン sed 's/\([^,]*\),.*/\1/g' test.csv ②パターン sed "s/.*,\([^,]*\)$/\1/g" test.csv の様にできました。 ③パターン 思いう浮かばず これで、できているので間違いはないかとおもいますが、 どうなのでしょうか。 なにかいい案はないでしょうか?

  • sedでの置換がうまくできません。

    sedを使用して以下の様な文字列を置換したいと考えています。 iPar(\"w\") → 何かの文字列 そこで以下のようなsedスクリプトを作成しました。 s/iPar\(\"w\"\)/test/g  → a.sed 使用してみました。具体的には↓のコマンド >sed -f a.sed inputデータ >outputデータ しかし結果ファイルをみても何も変わってくれません。 なにが悪いのでしょうか? どなたかご指南下さい。

  • IPアドレスの置換について

    お世話になっています。 sedコマンドにて既存のIPアドレスの各オクテットの末尾の数字を任意の数字に置換したいのですがいい方法はあるでしょうか? 置換前のIPアドレスは取得できるのですがその後の置換方法がうまくいかずご意見いただけばと思います。 sed -e 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/各オクテットの末尾を1にしたい /g' test.log

  • sedでの改行置換

    sedを用いた処理で質問があります。 出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。 (perlは敢えて使いません) 例えば、以下のようなファイルがあるとして、 $ cat hoge.txt hoge boo bar この出力結果を加工して、「hoge boo bar」のように、 改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか? ちなみに、以下のような使い方だと、うまくいきませんでした。 $ cat hoge.txt | sed 's/\ > / /g' $ cat hoge.txt | sed 's/\n/ /' ■実行環境 OS : RedHat EL 1 sedのバージョン : sed-4.0.7-3 宜しくお願い致します。

専門家に質問してみよう