leftマクロコマンドNo.01329
s-inoue さん 00/04/16 21:42
 
初めてこのフォーラムに参加させていただきます。

最近Windows95から98のPCに入れ替えました。
Windows98で秀丸エディタのマクロ機能を使用したところ以下のような現象が出ました。
マクロはCSVファイルに変換するためにカンマを挿入するものです。
現象は末尾にカンマを挿入するためにカーソルを移動するleftコマンドを使用すると
カーソルが末尾からさらに左に移動してしまうという現象です。
行の末尾以外ではleftコマンドは正常です。
処置としてすべてのleftコマンドをコメント行にしています。
Windows95ではこのような現象は起きていません。
Windows98では改行したとき、カーソルがCRより右側になる場合、自動的にカーソル
がCRの位置に移動するように思えます。
でもこのような動作がOSに関係するのかどうか分かりません。
秀丸エディタのバージョンは3.05です。

<<編集前>>
0000102756 j_menu
0000020225 e_menu
0000016566 j_qindex
0000040158 j_elect

<<編集後>>
0000102756, j_menu,
0000020225, e_men,u
0000016566, j_qinde,x
0000040158, j_elect,

<<編集マクロ(抜粋)>>
        gofiletop;  // カーソルを先頭に移動 //
        golineend;  // カーソルを行の末尾に移動 //
insert ","; // j_menu //
down;
left;
insert ","; // e_menu //
down;
right;
insert ","; // j_qindex //
down;
//left 2;//
insert ","; // j_elect //
down;
//left 3;//


[ ]
RE:01329 leftマクロコマンドNo.01330
きいろいまふらあ さん 00/04/16 23:10
 
きいろいまふらあといいます。

提示された例のどこがうまくいってない部分なのでしょうか?

>現象は末尾にカンマを挿入するためにカーソルを移動するleftコマンドを使用すると

末尾にカンマを挿入したいのにleftコマンドを?
もしかしてleftとdownを混同されてませんか?

>Windows98では改行したとき、カーソルがCRより右側になる場合、自動的にカーソル
>がCRの位置に移動するように思えます。

「改行したとき」というのが、「次の行に移動したとき」という意味であれば、
秀丸のファイルタイプ別の設定→全般→フリーカーソルモードの設定に依存します。
これは昔からです。OSに依存はしないと思います。

><<編集マクロ(抜粋)>>

抜粋とありますが、長いマクロですか?
加工するデータは常に同じ形をしているのでしょうか?
例では編集後には行の途中にもカンマが入っていますが、
とりあえず各行の末尾にカンマを入れるだけなら

golineend2; //論理行末に移動
insert ","; //カンマを挿入
golineend2; //論理行末に移動
down; //下に移動

をループでまわすのが確実と思います。
ファイル全体にこの処理をするなら、例えば

gofiletop;
while(1){
  golineend2;
  insert ",";
  golineend2;
  if(code = -1)break;
  down;
}
endmacro;

こんなマクロでどうでしょう?

[ ]
RE:01330 leftマクロコマンドNo.01331
ENCODINGSHIFTJIS さん 00/04/17 11:11
 

s-inoue さんのは フリーカーソルモード では意図した通りに動きます。
メニューのその他(O) ファイルタイプ別の設定 全般 フリーカーソルモード を
確認してください。

末尾 ,付加 なら (全・範囲・確認)置換 の正規表現で
 \n   ===>>  ,\n    
もできます。

[ ]
RE:01331 leftマクロコマンドNo.01333
ENCODINGSHIFTJIS さん 00/04/17 17:55
 
 , を垂直入力するなら、他の方法は
エディタ的でないが 1行の文字列を変数に拾って頭から項目文字数で
ちぎってゆく。表示の設定に影響されない。
垂直入力時のみ  貼り付け後のカーソル位置  先頭のまま
にすると  left; は不要にならないか?使いやすそうじゃないが。
__e__



[ ]
RE:01333 leftマクロコマンドNo.01335
s-inoue さん 00/04/17 21:50
 

「きいろいまふらあ」さんからのアドバイス

>提示された例のどこがうまくいってない部分なのでしょうか?

説明不足ですみません。

<<編集後>>
0000102756, j_menu,
0000020225, e_men,u

本当は e_menu, としたいのですが、 e_men,u となっています。
j_menuの末尾に"," を入れるとカーソルが","の後になっているので、
まず、"down"コマンドにより改行し、 e_menu の直後にカーソルを移動するために左
に一つカーソルを移動するために"left"コマンドを使用しています。
"left"コマンドを使用しないと e_menu の後にスペースが1つ入ってから "," が付
けられます。

insert ","; // j_menu //
down;
left;
insert ","; // e_menu //



原因は「ENCODINGSHIFTJIS」さんご指摘のとおり、フリーカーソルモードでマクロを
作成し、今回インストールし直したときの設定ではフリーカーソルモードを設定して
いなかったためでした。フリーカーソルモードでない場合、自動的にカーソルが行末
に移動するため、その位置からleftコマンドで移動させたため、必要以上に左に移動
してしまいました。


「きいろいまふらあ」さん、「ENCODINGSHIFTJIS」さん ありがとうございました。


[ ]
RE:01335 leftマクロコマンドNo.01337
きいろいまふらあ さん 00/04/18 00:55
 
きいろいまふらあです。
ちょっと思慮不足のようでした、私。

ところで、提示されたマクロは「抜粋」とされていましたが、
あまり汎用的には書かれていないような気がしました。
加工するデータはいつも同じ形なのでしょうか?

そうでなければやはり確実に行末にカンマを入れるコードにしておいた
ほうがよいのでは?というのは余計なお世話ですね。(^^;

中身のない発言で失礼しました。

[ ]