即席マクロ(5)- 続replaceallfast
『即席マクロ(4)-replaceallfast』では、選択されている行(段落)を文章毎に改行するマクロを紹介しました。
今回は、編集中の文書全体を文章毎にバラすマクロです。
コードは、
です。
前回のマクロから、inselectのオプションを削除しただけです。
文書全体を処理するので、範囲選択されていなければマクロを終了させる
if (!selecting) endmacro;
も必要有りません。
因みに前回の記事で説明するのを忘れましたが、\nというのは改行を表す正規表現です。
Wordでは、^pとか、^13(ワイルドカード)に該当します。
ただ、このコードだけでは、段落末尾の『。』+改行に、
余分な改行が追加されて、
『。』+改行+改行となってしまいます。
つまりこんな感じです。
この余分な改行を以下のコードで削除します。
最初のコードと合わせるとこうなります。
これで、全ての段落を文章毎にバラすことが出来ます。
但し、これでは段落と段落との区切りがわからなくなります。
元に戻せなくなってしまいます。
なので、もう一手間加えます。
つまり元々の段落の区切り(改行)に、改行を表す文字列"@@改行@@"を挿入してやります。
これを実行した結果はこうなります。
段落を復元する時は、一度全ての改行を削除して、この"@@改行@@"で改行すればいいのです。
"@@改行@@"は、飽くまで例えであって、他の文字列でも構いません。
但し、この"@@改行@@"、又は、これに該当する文字列を改行に置き換えるので、不必要な場所が改行されないように、改行以外のところとかぶらない文字列にする必要があります。
段落を復元するときのコードは以下のとおりです。
なお、日英翻訳の場合、段落を復元する時には、英文に訳されているはずです。
上のコードでは、文章と文章との間のスペースが取れてしまう可能性があるので、
こんな感じにしてもいいと思います。
3行目の、" +"の『+』は、直前の文字を1回以上繰り返すという意味の正規表現です。
つまり、このコードは、半角スペース(直前の文字)が繰り返されている箇所を半角スペース1個に置き換えるコードです。
1回以上なので、半角スペース1個の場合も置換の対象になってしまいますが、
その場合、半角スペース1個が半角スペース1個に置き換えられるだけなので結果としては変わりません。
マクロの作成手順は、『マクロを作ってみよう』の(1)~(5)を参照ください。
マクロの登録は、『マクロの登録方法』を参照ください。
ショートカットキーの割り当ては、『ショートカットキーを割り当てる』を参照ください。
今回は、編集中の文書全体を文章毎にバラすマクロです。
コードは、
replaceallfast "。", "。\n", regular;
です。
前回のマクロから、inselectのオプションを削除しただけです。
文書全体を処理するので、範囲選択されていなければマクロを終了させる
if (!selecting) endmacro;
も必要有りません。
因みに前回の記事で説明するのを忘れましたが、\nというのは改行を表す正規表現です。
Wordでは、^pとか、^13(ワイルドカード)に該当します。
ただ、このコードだけでは、段落末尾の『。』+改行に、
余分な改行が追加されて、
『。』+改行+改行となってしまいます。
つまりこんな感じです。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
文章・・・・・。
この余分な改行を以下のコードで削除します。
replaceallfast "\n\n", "\n", regular;
最初のコードと合わせるとこうなります。
replaceallfast "。", "。\n", regular;
replaceallfast "\n\n", "\n", regular;
replaceallfast "\n\n", "\n", regular;
これで、全ての段落を文章毎にバラすことが出来ます。
但し、これでは段落と段落との区切りがわからなくなります。
元に戻せなくなってしまいます。
なので、もう一手間加えます。
replaceallfast "\n", "@@改行@@", regular;
replaceallfast "。", "。\n", regular;
replaceallfast "\n\n", "\n", regular;
replaceallfast "。", "。\n", regular;
replaceallfast "\n\n", "\n", regular;
つまり元々の段落の区切り(改行)に、改行を表す文字列"@@改行@@"を挿入してやります。
これを実行した結果はこうなります。
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@
段落を復元する時は、一度全ての改行を削除して、この"@@改行@@"で改行すればいいのです。
"@@改行@@"は、飽くまで例えであって、他の文字列でも構いません。
但し、この"@@改行@@"、又は、これに該当する文字列を改行に置き換えるので、不必要な場所が改行されないように、改行以外のところとかぶらない文字列にする必要があります。
段落を復元するときのコードは以下のとおりです。
replaceallfast "\n", "", regular; //改行を全て削除。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。
なお、日英翻訳の場合、段落を復元する時には、英文に訳されているはずです。
上のコードでは、文章と文章との間のスペースが取れてしまう可能性があるので、
こんな感じにしてもいいと思います。
replaceallfast "\n", " ", regular; //改行→半角スペース一個。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。
replaceallfast " +", " ", regular;//半角スペースの繰り返し→半角スペース1個。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。
replaceallfast " +", " ", regular;//半角スペースの繰り返し→半角スペース1個。
3行目の、" +"の『+』は、直前の文字を1回以上繰り返すという意味の正規表現です。
つまり、このコードは、半角スペース(直前の文字)が繰り返されている箇所を半角スペース1個に置き換えるコードです。
1回以上なので、半角スペース1個の場合も置換の対象になってしまいますが、
その場合、半角スペース1個が半角スペース1個に置き換えられるだけなので結果としては変わりません。
マクロの作成手順は、『マクロを作ってみよう』の(1)~(5)を参照ください。
マクロの登録は、『マクロの登録方法』を参照ください。
ショートカットキーの割り当ては、『ショートカットキーを割り当てる』を参照ください。