キーマクロの動きがおかしい?No.19995
しろしろ さん 05/09/17 15:27
 
初めて投稿します。
いつも大変重宝しております。秀丸なしでは仕事になりません。

今最新のVersion5.03を使用しています。

どうもキーマクロの動きがおかしいのですが…

キーマクロで、ファイルの先頭にある行から、検索文字列を「検索...」で取り込み
下検索し、最初にヒットした行をカットして、ファイルの最後尾にペーストし、また
ファイルの先頭に戻って、先程検索文字列を取り込んだ行を削除する(と、次の検索
文字列の取り込み開始位置に来ています)。
このキーマクロを繰り返すと、検索文字列の行は減っていくのですが、ファイルの最
後尾には行がペーストされていかないのです。
キーマクロの記録時はうまくいくのですが、繰り返し再生すると駄目なのです。
古いバージョンのものでは試していませんが、単純なキーマクロですので、私自身も
これまでに何度も実行したような気がします。

もしかしてバグかな?ここに書けば伝わるのかな?と思い、投稿しました。
何卒宜しくお願い致します。

[ ]
RE:19995 キーマクロの動きがおかしい?No.19996
山紫水明 さん 05/09/17 20:20
 
 しろしろさん,こんばんは。

>キーマクロで、ファイルの先頭にある行から、検索文字列を「検索...」で取り
>込み下検索し、最初にヒットした行をカットして、ファイルの最後尾にペース
>トし、またファイルの先頭に戻って、先程検索文字列を取り込んだ行を削除す
>る(と、次の検索文字列の取り込み開始位置に来ています)。

 少しわかりにくきのですが,最初にカットする行と次に削除する行は異なるの
ですね(カットした行は存在しないから削除できない)。

 こちらではペーストはできるのですが,手順が違うのかも知れません。
キー操作の記録開始から終了まで操作を箇条書きで書いていただいた方がわかり
やすいと思います。
 できればサンプルがあった方がわかりやすいですね。
 私の理解では,検索語に「秀丸」をセットしてキー操作を記録して,その後繰
り返し実行すると(1)が(2)のようになるのですが,見当はずれですか?

(1)
あああああああああああああああああああ
ううううう秀丸1いいいいいいいいいいい
あああああああああああああああああああ
ううううう秀丸2いいいいいいいいいいい
あああああああああああああああああああ
ううううう秀丸3いいいいいいいいいいい
あああああああああああああああああああ
ううううう秀丸4いいいいいいいいいいい
あああああああああああああああああああ

(2)
あああああああああああああああああああ
あああああああああああああああああああ
あああああああああああああああああああ
あああああああああああああああああああ
あああああああああああああああああああ
ううううう秀丸1いいいいいいいいいいい
ううううう秀丸2いいいいいいいいいいい
ううううう秀丸3いいいいいいいいいいい
ううううう秀丸4いいいいいいいいいいい

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:19996 キーマクロの動きがおかしい?No.19999
しろしろ さん 05/09/19 12:54
 
山紫水明さん、ご丁寧なレスありがとうございます。

確かに判りにくかったですよね^^;
サンプルを示すとこんな感じになります。

●キーマクロ実行前の内容
 1|hede_00                              +
 2|hede_02                              |
 3|hede_03                              +-----検索する文字列
 4|hede_07                              |     だけからなる行
 5|hede_08                              |
 6|hede_10                              +
 7|
 8|
 9|
10|    hede_00 = 0x00400000,           /* start Address:0x00400000、length:0
x00000400 */    +
11|    hede_01 = hede_00 + 0x00000400, /* start Address:0x00400400、length:0
x00000280 */    |
12|    hede_02 = hede_01 + 0x00000280, /* start Address:0x00400680、length:0
x00000340 */    |
13|    hede_03 = hede_02 + 0x00000340, /* start Address:0x004009c0、length:0
x00000300 */    |
14|    hede_04 = hede_03 + 0x00000300, /* start Address:0x00400cc0、length:0
x00000180 */    |
15|    hede_05 = hede_04 + 0x00000180, /* start Address:0x00400e40、length:0
x00000200 */    +--検索対象の行
16|    hede_06 = hede_05 + 0x00000200, /* start Address:0x00401040、length:0
x00000680 */    |
17|    hede_07 = hede_06 + 0x00000680, /* start Address:0x004016c0、length:0
x00000100 */    |
18|    hede_08 = hede_07 + 0x00000100, /* start Address:0x004017c0、length:0
x00000a00 */    |
19|    hede_09 = hede_08 + 0x00000a00, /* start Address:0x004021c0、length:0
x00000380 */    |
20|    hede_10 = hede_09 + 0x00000380, /* start Address:0x00402540、length:0
x00000480 */    +
21|
22|
23|
24|[EOF]

ここの状態から、まずカーソルをファイルの先頭に持って行きます。

ここから、キーマクロの記録を開始します。
@行の先頭から「検索...」を実行して、検索文字列を取り込みつつ、その文字列で
下検索します。
A最初にヒットした行をカットします。
Bファイルの最後尾にカーソルを移動します。
C先程カットした1行をペーストします。
Dカーソルをファイルの先頭に移動します。
ここで記録終了です。
これを「検索する文字列だけからなる行」がなくなるまで、キーマクロの再生を繰り
返します。

予定していた結果と実際の結果は以下の通りです。

●予定していた、キーマクロ実行後の内容
 1|
 2|
 3|
 4|    hede_01 = hede_00 + 0x00000400, /* start Address:0x00400400、length:0
x00000280 */
 5|    hede_04 = hede_03 + 0x00000300, /* start Address:0x00400cc0、length:0
x00000180 */
 6|    hede_05 = hede_04 + 0x00000180, /* start Address:0x00400e40、length:0
x00000200 */
 7|    hede_06 = hede_05 + 0x00000200, /* start Address:0x00401040、length:0
x00000680 */
 8|    hede_09 = hede_08 + 0x00000a00, /* start Address:0x004021c0、length:0
x00000380 */
 9|
10|
11|
12|    hede_00 = 0x00400000,           /* start Address:0x00400000、length:0
x00000400 */
13|    hede_02 = hede_01 + 0x00000280, /* start Address:0x00400680、length:0
x00000340 */
14|    hede_03 = hede_02 + 0x00000340, /* start Address:0x004009c0、length:0
x00000300 */
15|    hede_07 = hede_06 + 0x00000680, /* start Address:0x004016c0、length:0
x00000100 */
16|    hede_08 = hede_07 + 0x00000100, /* start Address:0x004017c0、length:0
x00000a00 */
17|    hede_10 = hede_09 + 0x00000380, /* start Address:0x00402540、length:0
x00000480 */
24|[EOF]

●実際の、キーマクロ実行後の結果
 1|
 2|
 3|
 4|    hede_02 = hede_01 + 0x00000280, /* start Address:0x00400680、length:0
x00000340 */
 5|    hede_03 = hede_02 + 0x00000340, /* start Address:0x004009c0、length:0
x00000300 */
 6|    hede_04 = hede_03 + 0x00000300, /* start Address:0x00400cc0、length:0
x00000180 */
 7|    hede_05 = hede_04 + 0x00000180, /* start Address:0x00400e40、length:0
x00000200 */
 8|    hede_06 = hede_05 + 0x00000200, /* start Address:0x00401040、length:0
x00000680 */
 9|    hede_07 = hede_06 + 0x00000680, /* start Address:0x004016c0、length:0
x00000100 */
10|    hede_08 = hede_07 + 0x00000100, /* start Address:0x004017c0、length:0
x00000a00 */
11|    hede_09 = hede_08 + 0x00000a00, /* start Address:0x004021c0、length:0
x00000380 */
12|    hede_10 = hede_09 + 0x00000380, /* start Address:0x00402540、length:0
x00000480 */
13|
14|
15|
16|    hede_00 = 0x00400000,           /* start Address:0x00400000、length:0
x00000400 */
17|    hede_01 = hede_00 + 0x00000400, /* start Address:0x00400400、length:0
x00000280 */
24|[EOF]

実際に近いイメージで書いたら、折り返してしまいました^^;
おわかりいただけたでしょうか?

何をしたかったと言うと、
「検索対象の行」は、メモリのマッピングを定義しているところ全行で、その内構造
体として確保
しているものだけを別に選別して「検索する文字列だけからなる行」として、「検索
対象の行」から
検索し、上から順に抽出したかっただけなんです。

これまでも普通に行なえたように記憶しているのですが・・・、
いかがなものでしょう?

[ ]
RE:19999 キーマクロの動きがおかしい?No.20000
ENCODINGSHIFTJIS さん 05/09/19 15:25
 
キー記録を マクロ化して 見てみました
----
 golinetop;
 getsearch;
 searchdown "hede_00" , regular, nocasesense, hilight;
 if( ! result )  beep;
 deleteline;
 gofileend;
 paste;
 gofiletop;
 golinetop;
 deleteline;
 golinetop;
-----
検索文字列が固定ですね、そうかも

[ ]
RE:20000 キーマクロの動きがおかしい?No.20001
ENCODINGSHIFTJIS さん 05/09/19 15:59
 
マクロヘルプ
findup, finddown, getsearch文  目次−検索系文

findup, finddownは、コマンドの
上候補,下候補と完全に同じ動作ではありません。
キー操作の記録では、上候補,下候補は
searchup, searchdown として記録されます。

だそうです。キー記録をマクロ化して、searchdown → finddown
書き換えになる。動的評価は微妙だ

[ ]
RE:19999 キーマクロの動きがおかしい?No.20002
山紫水明 さん 05/09/19 17:01
 
 しろしろさん,こんにちは。

 完全に取り違えていたようですね。(^^;
 やはり例文がないと無理でした。

>@行の先頭から「検索...」を実行して、検索文字列を取り込みつつ、その文字
>列で下検索します。

 この部分,どうされたのかはっきりしませんが,2段階にする必要があります

キー記録開始
1.検索文字列の取得(コマンド一覧・検索系にあります)
2.下方検索
3.ヒットした行を選択
4.カット
5.ファイル最終行に移動
6.ペースト
7.ファイル先頭
8.行削除
記録終了

 これで再生するとできました。

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:20002 キーマクロの動きがおかしい?No.20003
しろしろ さん 05/09/19 20:37
 
ENCODINGSHIFTJISさん、山紫水明さん、ほんとにありがとうございます。
お手数お掛けしてすみませんm(_ _)m

ENCODINGSHIFTJISさんが示して下さったように、マクロを書くなら大丈夫なのでしょ
うか?
マクロも必要に応じて書いてきましたが、今回は単純な動きなのでそちらは考慮しま
せんでした^^;

私が行なったキー動作を、山紫水明さんの記述を借りて、
より細かく手順を書くと以下のようになります。

まずファイルの先頭にカーソルを移動しておきます(この時点でその行の先頭にもい
ます)。
記録開始!
@ 「検索...」します。 ←ここで検索ダイアログが開いて、自動的に単語単位で検
索文字列が入りますね。
 ここの検索ダイアログ内の「下検索ボタン」を押下します。
A 最初にヒットした行内でカーソルを「行頭に移動」します。
B 矢印下キーを押下して1行選択します。
C 選択された1行を「切り抜き」ます。
D カーソルを「ファイルの最後」に移動します。
E 「貼り付け」します。
F カーソルを「ファイルの先頭」に移動します。
G 矢印下キーを押下して1行選択します。
H 「Delete」キーの押下で選択行を削除します。 ←この時点で次の検索文字列から
なる行の行頭に来ますね。
記録終了!

この再生を繰り返すものです。

山紫水明さんのご提案を受けて、上述の@を「検索文字列の取得」と「下検索」の
2つの手順に分けて実行してみましたが、何故か私のところでは駄目でした。

設定とかで何か動作に違いが出ているものなのでしょうか?

取り合えず、実際に必要なリストの作成及びチェックは終えているので、
もしバグ!?的なものなら、直してもらえたら良いなぁーーとの思いです。

でも私のやり方や、処理要求が違っていたらすみません(謝)

[ ]
RE:20003 キーマクロの動きがおかしい?No.20004
山紫水明 さん 05/09/19 21:17
 
 しろしろさん,こんばんは。

>上述の@を「検索文字列の取得」と「下検索」の2つの手順に分けて実行して
>みましたが、何故か私のところでは駄目でした。

 申し訳ありません。再度確認したら,おっしゃるようにやはりだめでした。
ENCODIGSHIFTJIS さんの指摘のように,キー操作では下方検索の検索語は固定さ
れてしまうようです。
 バグというより今のところこれが仕様のようですが,秀丸担当さんからコメン
トがあるでしょう。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:20001 キーマクロの動きがおかしい?No.20005
ENCODINGSHIFTJIS さん 05/09/19 21:21
 
// 2箇所かな

 golinetop; // カーソルは検索語上
 getsearch;
// searchdown "hede_00" , regular, nocasesense, hilight;
// if( ! result )  beep;
 finddown; // searchdown のかわり
// deleteline;  // クリップボードに入らない?
 selectline;  //
 cut;        //
 gofileend;
 paste;
 gofiletop;
 deleteline;

[ ]
RE:20004 キーマクロの動きがおかしい?No.20007
秀丸担当 さん 05/09/20 11:58
 

山紫水明さんとENCODINGSHIFTJISさんの言われる通り、下候補をしたときのキー
操作の記録は、finddownにはならず、searchdownになります。
なので、検索文字列は固定になり、「検索文字列の取得」コマンドを伴うキー操
作の記録は有効には働きません。
こればV5.00で変更になったわけではなく、ずっと以前からの仕様です。

もし現状の仕様でやるとしたら、finddown;(またはfinddown2;)とだけ書いた
マクロを用意し、マクロ登録し、それをF3キーなどに割り当ててやると回避でき
ると思います。

いずれにしても、最初の書き込みにありました検索ダイアログを出して記録をす
る方法では、検索文字列は固定になってしまうので、「検索文字列の取得」コマ
ンドを使う必要があります。


いまさらながら、この仕様は変更してもいいかもしれません。
V5.00βのときに検索文字列の強調の関係で互換性が問題になりましたが、下候
補の記録は、
finddown;
hilightfound 1;
といった感じの2文で記録されるようになれば、互換性も維持しつつできるかも
しれません。
もし仕様変更するとしたら、次の先行開発バージョンでやろうと思います。

[ ]
RE:20007 キーマクロの動きがおかしい?No.20021
しろしろ さん 05/09/20 21:52
 
「秀丸担当」さん、すべて了解致しました。

>もし仕様変更するとしたら、次の先行開発バージョンでやろうと思います。

何卒宜しくお願い致しますo(^o^)o

山紫水明さん、ENCODINGSHIFTJISさんにも大変お世話になりました。
ありがとうございましたm(_ _)m

[ ]