|
こんばんは。ユーザの IKKI です。
> > ・<>の外側に全角数字があるのか。全角数字も削除対象か。
> 抽出前に数字は全て半角にします。
それでしたら、マクロの最後 (「endmacro」の上) に
replaceallfast "[0-9]+", "", regular;
を付け加えて半角数字を全削除しちゃえばよさそうですね。
> 元データは雑多で、そこから電話番号とか住所とかのデータを拾い、
> 不要な数字は捨てる、という作業です。1行に<>0-10個あり、各<>には数字が0-
> 10個位入ります。
なるほど。とりあえず、先ほどのマクロで要求は満たせると思います。
もし可能なら、もう少し作業の全体像というか、入力データがどこから来て、出力
データを何に使うのか、といったことがわかれば、大域的に見てより適切な回答がで
きるかもしれません。
# KRT さんのお話を伺う限り、秀丸を使うのが最善ではない可能性を感じています。
> 下記をコピペして、抽出数字全角.macとして、やってみましたが、Xマークのエラー
> が返ってきますが、バージョンをv8にして、再度やります。
お手数かけます。一応、v7 対応に書き直したマクロも例示しておきます。
<>外の数字を全削除する処理も入っています。
ただ、変換対象を数字以外にも拡張しようと思った場合、こちらのマクロは v8 用の
マクロに比べて改造が難しいと思います。
// 抽出数字全角・他数字削除.mac
setcompatiblemode 0x0200;
gofiletop;
searchdown "<.*?>", regular;
while (result) {
call TR2 gettext(foundtopx, foundtopy, foundendx, foundendy, true), "012345
6789", "0123456789";
insert $$return;
finddown;
}
begingroupundo;
replaceallfast "[0-9]+", "", regular;
endgroupundo;
endmacro;
TR2: // 1文字ずつ変換 (半角から全角へ)
##i = strlen($$1);
while (##i > 0) {
##c = ascii(rightstr($$1, ##i));
##p = strstr($$2, char(##c));
if (##p >= 0) $$r = $$r + midstr($$3, ##p * 2, 2);
else if (##c != 0x0d) $$r = $$r + char(##c);
##i = ##i - strlen(char(##c));
}
return $$r;
|
|