行頭に連番をつけるマクロについてNo.05382
yasuyyasu さん 06/12/04 20:07
 
こんばんは。また質問させて頂きます。


行頭に行番号(連番)をつける作業をしたくて、検索したところ、
下記マクロに出会いました。
ですが、これを実行すると全範囲指定のみの動作でした。
これを範囲指定もできて、なおかつ範囲を指定しない時は全範囲に作業するように改
造したいのですが、
どこをどう直せばいいかわかりません・・・

申し訳ございませんが、どなたかお教え頂けないでしょうか?
今回もよろしくお願い申し上げます。


以下、見つけたマクロです
http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x00128.html

-----------------------------------------------------------
gofiletop;
#i = 1;
while( y < (linecount - 1) ){
    insert str(#i) + ",";
    #i = #i + 1;
    moveto 0,(y + 1);
}

-----------------------------------------------------------

[ ]
RE:05382 行頭に連番をつけるマクロについNo.05384
K'zawa さん 06/12/05 11:37
 
yasuyyasuさん、こんにちは。
K'zawaです。

>行頭に行番号(連番)をつける作業をしたくて、検索したところ、
>下記マクロに出会いました。
>ですが、これを実行すると全範囲指定のみの動作でした。
>これを範囲指定もできて、なおかつ範囲を指定しない時は全範囲に作業するように改
>造したいのですが、
>どこをどう直せばいいかわかりません・・・

そのサンプルマクロ、部分編集は別として、
実用上の問題はないですか?
改善の余地がありそうな…サンプルだし。
シンプルな形のまま1つのファイルとしておいて、
研究してみてはいかが?

で、部分編集用のマクロを作ってみました。
'$macroname ='に実行したいマクロ名を入れて
呼び出す形になってます。
お試しあれ。

--------------------------------------------------------
// 「部分編集機能を付加するマクロ」
// 範囲指定中なら指定範囲を作業用の別秀丸へコピーして、
// 目的のマクロを実行後、元の場所へ書き戻すマクロ。
// 範囲指定は行頭で始まり、行頭で終わるようにして下さい。
// BOX範囲選択には対応していません。
// 尚、秀丸エディタVer6以降では、部分編集モードを利用することで
// もっと簡単に同様の結果を得ることができます。

$macroname = "test.mac"; // 途中で実行するマクロ名

#sel = selecting;  // 範囲指定状態の取得

// 範囲指定時、新規秀丸へコピー
if(#sel){      // 範囲指定ならば
 #main = hidemaruhandle(0); // 現秀丸のハンドル
 copy2;      // コピー(選択範囲はそのまま)
 newfile;     // 新規秀丸
 #sub = hidemaruhandle(0); // 新規秀丸のハンドル
 paste;      // 貼り付け
}

execmacro $macroname;   // マクロ実行

// コピーした時は書き戻す
if(#sel){      // 範囲指定だったならば
 selectall;     // 全選択
 copy;      // コピー
 setactivehidemaru #main; // 元の秀丸
 closehidemaruforced #sub; // 作業用秀丸を閉じる
 paste;      // 貼り付け
}
--------------------------------------------------------

[ ]
RE:05384 行頭に連番をつけるマクロについNo.05385
yasuyyasu さん 06/12/05 12:50
 
K'zawaさん、こんにちは。

yasuyyasuです。またまた素敵なマクロをお教え頂きありがとうございます。
しかも今回は細かな説明も入れて下さったので、マクロが少し理解することが出来ま
した。

私的には、過去に公開されていた連番追加のマクロでほぼ問題なかったのですが、
1点だけ不便な点があったのは、最終行に改行が入ってない場合、
全範囲で連番を振ると、最終行だけには番号が振ってないという点でした。
この点は前回の「行末に文字追加」の時と同じだと思い、K'zawaさんに前回にお教え
頂きました
「最終行の長さが0出なければ改行マクロ」を追加して、無事解決しました!

ですが、長文の中である部分だけに連場を振りたいことがあるので、
その時に範囲選択ができればより便利だなと思って質問させて頂いた次第です。

今回のマクロを実行してみたところ、バッチリでした!
ありがとうございます!!

欲を言えば、行頭からではなく行の途中から選択したとしても、
その行の行頭に番号が振れるとありがたいですが、
それはぜいたくなので今回お教え頂いたものを使用させて頂きます。

(ちなみに行末まで範囲選択しなくても(行の途中で選択範囲が終わっている場合)、
その行には番号が振られています。
これは前回お教え頂いた「最終行の長さが0出なければ改行マクロ」を付け足した事
が関係しているのですか?)

いずれにせよ、これで私の仕事がさらに早くなります。
こちらでお教え頂いたマクロのお陰で、ミスがなくなった上、
時間も短くなり、周りのみんなもとても喜んでおります。

本当にいつもお助け頂きありがとうございました!

[ ]
RE:05385 行頭に連番をつけるマクロについNo.05386
K'zawa さん 06/12/05 16:48
 
yasuyyasuさん、こんにちは。
K'zawaです。

>この点は前回の「行末に文字追加」の時と同じだと思い、K'zawaさんに前回にお教え
>頂きました
>「最終行の長さが0出なければ改行マクロ」を追加して、無事解決しました!

今回紹介したマクロは、以前の置換マクロにも使えます。
其の場合は、以前のマクロが

-------------------------------------------
gofileend;
if(linelen2 != 0){
  insert "\n";
  #ins = 1;
}
$s=input("削除する文字列");
if($s=="") endmacro;
replaceallfast $s+"$","",regular;
if(result) message str(result)+"個の置換を行ないました。";
else beep;
gofileend;
if(#ins == 1) backspace;
-------------------------------------------

のようになります。
ほかのマクロもこんな感じで、つまり単体では全体を対象とする
ような形にしておいて
さらに、さっきのマクロを

---------------------------
$macroname = "test.mac";
---------------------------
を、↓↓↓
---------------------------
$macrotitle[0] = "あああ";
$macroname[0] = "aaa.mac";
$macrotitle[1] = "いいい";
$macroname[1] = "bbb.mac";
$macrotitle[2] = "ううう";
$macroname[2] = "ccc.mac";
menuarray $macrotitle, 3;
#n = result;
if(#n == 0) endmacro;
---------------------------

---------------------------
execmacro $macroname;
---------------------------
を、↓↓↓
---------------------------
execmacro $macroname[#n - 1];
---------------------------

のように変更すると、メニューでいろいろな
子マクロを呼び出せるようになって便利です。


ちなみに、行番号をつけるマクロですが、
行の折り返しがあると、そこにも番号をふってしまいます。
長い行がなければいいのですが…。

[ ]
RE:05386 行頭に連番をつけるマクロについNo.05387
yasuyyasu さん 06/12/05 18:27
 
K'zawaさん、こんにちは。
yasuyyasuです。

マクロについて色々とお教え頂きありがとうございます!
なんとなくですが、これはこういう処理をするのかな?という事が見えて参りました。
とは言っても、1冊の本とヘルプとお教え頂いたマクロからの想像という感じですので、
自分で1から作れるようになるには、気が遠くなるような時間が必要です・・・

すみませ。1つお教え頂きたいのですが、
>if(linelen2 != 0){
>  #ins = 1;
が意味しているのはどういうことなのでしょうか?
0とか1とか数字があると余計に分からなくなってしまっています。
初歩的な質問ですみません・・・。


>
>ちなみに、行番号をつけるマクロですが、
>行の折り返しがあると、そこにも番号をふってしまいます。
>長い行がなければいいのですが…。

長文でもやってみました。
おっしゃる通り、折り返しの箇所にも番号を振っていました。
今日、何度も使用したのですが、その時はたまたま短い文だったので
全く気がつきませんでした。
気をつけて使用しないと駄目ですね。
でもこれをこれからも愛用したいので、
長文には使用しないことを注意して作業します!
お教え頂きありがとうございました。

[ ]
RE:05387 行頭に連番をつけるマクロについNo.05388
K'zawa さん 06/12/05 21:08
 
yasuyyasuさん、こんばんは。
K'zawaです。

>すみませ。1つお教え頂きたいのですが、
>>if(linelen2 != 0){
>>  #ins = 1;
>が意味しているのはどういうことなのでしょうか?
>0とか1とか数字があると余計に分からなくなってしまっています。

コマンドやキーワード、内部関数はそこにカーソルを持っていって
[マクロ]-[マクロヘルプ]でそのページが開きますので
それで調べられます。
演算子は残念ながら使える演算子が出ているだけで
意味が載ってません。本かC言語の解説HPで調べてください。

ちなみに、
if(linelen2 != 0){
もし、論理行長が0でないならば

#ins = 1;
数値変数insに1を入れる(ここでは改行したの意)
変数名はマクロ作者が付ける。
です。


>長文でもやってみました。
>おっしゃる通り、折り返しの箇所にも番号を振っていました。
>今日、何度も使用したのですが、その時はたまたま短い文だったので
>全く気がつきませんでした。
>気をつけて使用しないと駄目ですね。
>でもこれをこれからも愛用したいので、
>長文には使用しないことを注意して作業します!

それを回避する方法はいくつかありますので、
研究するとよいでしょう。

[ ]
RE:05388 行頭に連番をつけるマクロについNo.05389
Iranoan さん 06/12/05 23:14
 
 今日は、Iranoan です。
> 演算子は残念ながら使える演算子が出ているだけで
> 意味が載ってません。本かC言語の解説HPで調べてください。
 う〜ん、マクロ・ヘルプにはありませんが、マクロ・ヘルプの最初の「マク
ロを初めて作成する方はこちらへ」からでも開ける be_hidemac.chm の「演算
子について」に説明が載っていますよ。

[ ]
RE:05389 行頭に連番をつけるマクロについNo.05390
K'zawa さん 06/12/06 09:08
 
Iranoanさん、こんにちは。
K'zawaです。

> う〜ん、マクロ・ヘルプにはありませんが、マクロ・ヘルプの最初の「マク
>ロを初めて作成する方はこちらへ」からでも開ける be_hidemac.chm の「演算
>子について」に説明が載っていますよ。

そこは気が付きませんでした。
フォローありがとうございます。

[ ]
RE:05389 行頭に連番をつけるマクロについNo.05391
yasuyyasu さん 06/12/06 09:16
 
K'zawaさん、Iranoanさん、おはようございます。
yasuyyasuです。

自分の使用するマクロを早急に求めるあまり、マクロヘルプなどをじっくりと読んで
おりませんでした・・・。
これからマクロを勉強するにあたり、お教え頂いた箇所や本を参考にしていきたいと
思います。
自分だけではどのように学べばいか、どこをみたらいいかなど分かりませんでしたの
でお教え頂けてよかったです。

K'zawaさん、マクロの意味をお教え頂きありがとうございました。
わかるようなわからないようなという感じなのですが、
これはやはり順を追って学んでいかないと私には完全には理解できないようです。

今回のマクロに関してもまだ改良のすることが出来る事もわかりましたので
(折り返しの箇所にも連番を振ってしまう点)
時間をかけてでも希望通りのマクロにしたいと思います。
そのためにはまず勉強ですね!

いつもたくさんの知識を頂き感謝申し上げます。
皆様本当にありがとうございました。

[ ]