■ 質問はここへ ■

前へ 次へ
No. 215 (214へのコメント)投稿者: CINEPHILE日付: 2001/09/15 00:18:17
題名 : Re:頻度カウントマクロ(?)のお願い

>いつもお願いばかりで申し訳ありません。現在編集中のファイルで使われ
>ている文字列が何回現れるかを調べるマクロを希望しています。操作とし
>ては:
>
>(1) カウントしたい文字列をハイライトする
>(2) マクロを実行する
>(3) 使用されている個数を表示する。

 文字列の使用回数を調べるだけならば、次のマクロで実行できると思います。

proc main
dim srchstr$, c, n
srchstr$ = inputbox$("検索する文字列を入力してください。", " * 文字列の使用回数を調査 * ", "", "")
if srchstr$ = "" or srchstr$ = chr$(&H1B) then exit proc
@MoveFileTop
c = len(srchstr$)
if left$(@TextCr$(@Line), c) = srchstr$ then
n = 1
end if
do while 1
@FindStringBottom srchstr$
if @@SearchFound = 0 then exit do
n++
loop
call msgbox(srchstr$ + " は " + cformat$("%d", n) + " 個見つかりました。", 0, " * 文字列の使用回数を調査 * ")
end proc

 文字列の強調表示に関しては、よださんの公開なさっている「単語を強調表
示するマクロ」を使うことができます。次の場所からダウンロードできます。

http://www.valley.ne.jp/~yod/sippitu.html

 一つのマクロで実行することも可能でしょうが、よださんのマクロはすでに
公開されているものなので、とりあえずこのまま挙げておきます。

# マクロに何か問題がありそうでしたら、ご指摘をお願いいたします。>マク
# ロ作者の方々

>p.s. qx@mxe.mesh.ne.jpにメールを送ってもどうしても受け付けられないので
>こちらを見つけて質問させていただきました。
>どうぞよろしくお願いいたします。

 メーリングリストは現在調子が悪いようです。いずれ復旧してからご参加く
ださい。

No. 216 (215へのコメント)投稿者: CINEPHILE日付: 2001/09/15 00:29:00削除済 返信
題名 : Re^2:頻度カウントマクロ(?)のお願い
No. 217 (215へのコメント)投稿者: CINEPHILE日付: 2001/09/15 00:46:49
題名 : Re^2:頻度カウントマクロ(?)のお願い

 ちょっと訂正です。

 @Redraw を入れたのと、検索結果を表示するメッセージボックスで、検索文
字列をダブルクオートで囲むようにしました。

'文字列の使用回数を調査
proc main
dim srchstr$, c, n
srchstr$ = inputbox$("検索する文字列を入力してください。", " * 文字列の使用回数を調査 * ", "", "")
if srchstr$ = "" or srchstr$ = chr$(&H1B) then exit proc
@Redraw = 0
@MoveFileTop
c = len(srchstr$)
if left$(@TextCr$(@Line), c) = srchstr$ then
n = 1
end if
do while 1
@FindStringBottom srchstr$
if @@SearchFound = 0 then exit do
n++
loop
@Redraw = 1
call msgbox("""" + srchstr$ + """" + " は " + cformat$("%d", n) + " 個見つかりました。", 0, " * 文字列の使用回数を調査 * ")
end proc

No. 218 (217へのコメント)投稿者: CINEPHILE日付: 2001/09/15 01:39:43
題名 : Re^3:頻度カウントマクロ(?)のお願い

>(1) カウントしたい文字列をハイライトする
>(2) マクロを実行する
>(3) 使用されている個数を表示する。

 ちょっと趣旨を誤解していました。

 @Redraw = 0 の前の行までを、次のように変更するとご希望通りではないか
と思います。

proc main
dim srchstr$, c, n
if @Select = 1 or @Select = 2 then
@BlockClipboardCopy
srchstr$ = clipboard$()
else
srchstr$ = inputbox$("検索する文字列を入力してください。", " * 文字列の使用回数を調査 * ", "", "")
if srchstr$ = "" or srchstr$ = chr$(&H1B) then exit proc
end if

 まだ慣れないもので、たびたび訂正してすみません。

No. 219 (214へのコメント)投稿者: かぶねこ HP日付: 2001/09/15 01:59:31
題名 : Re:頻度カウントマクロ(?)のお願い

そうなんです、メーリングリストの調子が悪いようで……。

すでに CINEPHILE さんがマクロをアップしてくださってますが、もっと原始的
に、全置換の個数確認を自動実行するだけだと、こんなのになります。ステータ
スバーに「n 個置換しました」と表示されるのを見落とさないで読む必要があり
ます。

proc main
dim n, s$
if @Select = 0 then exit proc '選択してないと実行しません
s$ = @TextSelect$
@Select = 0
n = @@FindFromTop
@@FindFromTop = 1
@UndoBlock = 1
@ReplaceString2 s$, s$, 1
@UndoBlock = 0
@@FindFromTop = n
end proc

そういえば、この置換個数をマクロで参照できたらいいのに、と以前から思って
たんですが、できないんですよね。なんか方法あるのかもしれませんが……。

No. 220 (219へのコメント)投稿者: kenmotu日付: 2001/09/15 03:06:17
題名 : Re^2:頻度カウントマクロ(?)のお願い

CINEPHILE さん、かぶねこさん。マクロを作ってくださり、ありがとうご
ざいました。おかげで目的を達成することができました。

ただ、わがままを言わせていただくと、マクロ実行後、カーソルが、マク
ロを実行した位置に戻ってくれるとさらにありがたいかなあ、と思った次
第で・・・

お手すきのときにでもご一考いただければ、とても幸せです。

No. 221 (220へのコメント)投稿者: CINEPHILE日付: 2001/09/15 03:54:51
題名 : Re^3:頻度カウントマクロ(?)のお願い

>ただ、わがままを言わせていただくと、マクロ実行後、カーソルが、マク
>ロを実行した位置に戻ってくれるとさらにありがたいかなあ、と思った次
>第で・・・

 これでどうでしょうか。

proc main
dim srchstr$, c, n, x, y
if @TextSelect$ = "" then
srchstr$ = inputbox$("検索する文字列を入力してください。", " * 文字列の使用回数を調査 * ", "", "")
if srchstr$ = "" or srchstr$ = chr$(&H1B) then exit proc
else
srchstr$ = @TextSelect$
end if
x = @BytePos
y = @Line
@Redraw = 0
@MoveFileTop
c = len(srchstr$)
if left$(@TextCr$(@Line), c) = srchstr$ then
n = 1
end if
do while 1
@FindStringBottom srchstr$
if @@SearchFound = 0 then exit do
n++
loop
@BytePos = x
@Line = y
@Redraw = 1
call msgbox("""" + srchstr$ + """" + " は " + cformat$("%d", n) + " 個見つかりました。", 0, " * 文字列の使用回数を調査 * ")
end proc

 @BlockClipboardCopy を使うとクリップボードに入るので、かぶねこさんの
投稿を参考にして、@TextSelect$ に変更しました。実は、このようなプロパ
ティがあることを知らなかったので、以前からちょっと悩んでいました。

# 途中からマクロの勉強のようになってしまいましたが、やはりそつのない仕
# 事をするのは容易ではありませんね。普段はすでに出来上がったマクロを使
# わせていただく側なので、なかなか気がつきませんが。

No. 222 (221へのコメント)投稿者: CINEPHILE日付: 2001/09/15 05:53:40
題名 : Re^4:頻度カウントマクロ(?)のお願い

 これで最後だといいのですが……。

 マクロの終了前にカーソル位置を復元するところで、先に行を指定しないと
位置がくるってしまうことがあるようです。

 したがって、

@Line = y
@BytePos = x

のように、順番を入れ替えてください。

No. 223投稿者: ケイン日付: 2001/09/15 09:21:55
題名 : 字消しの方法教えてください

はじめまして。
最近「ワードを捨ててエディタ・・・」を購入し使い始めた初心者です。
この本の中で文字の上に線を引く「文字消し」ができることを知り色々と
試したのですが出来ませんでした。
基本的な質問でお恥ずかしい次第です。
諸先輩方、ご指導下さい。
よろしくお願いします。

No. 224 (221へのコメント)投稿者: かぶねこ HP日付: 2001/09/15 11:11:23
題名 : Re^4:頻度カウントマクロ(?)のお願い

CINEPHILE さん、@TextSelect$ が参考になってよかったです。もちろんわたし
もどなたかのマクロを読んで覚えました。マクロで使えるコマンドに何があるか
というのはなかなか全部把握しておけませんよね。ときどき増えますし。

kenmotsu さん、やっぱりカーソル位置復帰はあったほうがいいですよね。原始
的マクロで復帰関係が多くなると「本文」の割合が少なくなってしまって本末転
倒ですし、CINEPHILE さんのがありますが、ついでに。

proc main
dim pos, line, top
pos = @BytePosCr
line = @Line
top = @Line - @TopLine
dim n, s$
if @Select = 0 then exit proc
s$ = @TextSelect$
@Select = 0
n = @@FindFromTop
@@FindFromTop = 1
@UndoBlock = 1
@ReplaceString2 s$, s$, 1
@UndoBlock = 0
@@FindFromTop = n
@Line = line
@ByteposCr = pos
@TopLine = @Line - top
end proc

次へ
現在の既読番号は 0  既読を


メールアドレスを表示するにはURLの後ろに &m=bb6a9a3f をつけてください。
ユーザー フォーラム一覧

http://www2k.biglobe.ne.jp/~araken/
http://0ban.com/araken/