任意の文字で改行をするようなマクロはあNo.05330
yasuyyasu さん 06/11/25 11:34
 
こんにちは。秀丸を使わせて頂いている者です。
マクロについてはまったくの初心者ですのでぜひお教え頂ければと思います。

@任意の文字を改行にするマクロ
A行末に文字を追加するマクロ
B行末から指定文字数分の文字を削除

の3つのマクロございましたらお教え頂けると幸いです。

@の場合は
  あか・あお・きいろ・くろ・みどり
これを、
  あか
  あお
  きいろ
  くろ
  みどり
のように変更。

Aの場合は、@の逆で
  あか
  あお
  きいろ
  くろ
  みどり
これを
  あか・
  あお・
  きいろ・
  くろ・
  みどり・
に変更。

という具合です。
ボックスが出てきて、そこに入力して変換というものがあればお教え下さい。
いずれも範囲指定しない場合は全範囲での変換が出来るようであればなおありがたい
です。

何卒よろしくお願い致します。

[ ]
RE:05330 任意の文字で改行をするようなマNo.05331
IKKI さん 06/11/25 13:57
 
IKKI です。こんにちは。

yasuyyasu さんは正規表現置換を使いこなしていらっしゃいますね。
正規表現置換をマクロで行うには

replaceallfast "検索文字列", "置換文字列", regular, inselect;

と書きます(全範囲なら「, inselect」は不要)。
さきほどの K'zawa さんのマクロでも replaceallfast が使われています。

> @任意の文字を改行にするマクロ
> A行末に文字を追加するマクロ
> B行末から指定文字数分の文字を削除

これらはいずれも K'zawa さんのマクロをほんのちょっと改造すれば作れます。
マクロヘルプなどを参考にして、この機会に挑戦されてみてはいかがでしょう。








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

以下、参考までに。

// 任意の文字を改行にする
$s = input("改行にする文字列");
$r = "\\n";
if ($s == "") endmacro;
if (selecting) replaceallfast $s, $r, regular, inselect;
else replaceallfast $s, $r, regular;
if (result) message str(result) + "個の置換を行ないました。";
else beep;

// 行末に文字を追加
$s = "$";
$r = input("行末に追加する文字列");
if ($r == "") endmacro;
if (selecting) replaceallfast $s, $r, regular, inselect;
else replaceallfast $s, $r, regular;
if (result) message str(result) + "個の置換を行ないました。";
else beep;

// 行末から指定文字数分の文字を削除
$s = input("削除する文字数");
$r = "";
if ($s == "") endmacro;
$s = ".{1," + $s + "}$";
if (selecting) replaceallfast $s, $r, regular, inselect;
else replaceallfast $s, $r, regular;
if (result) message str(result) + "個の置換を行ないました。";
else beep;

[ ]
RE:05331 任意の文字で改行をするようなマNo.05332
yasuyyasu さん 06/11/25 14:34
 
IKKI さん こんにちは。
早速のご回答感謝申し上げます。

私が希望しておりました作業がすべて出来るようにして頂き大感激です!
お教え頂きましたものを拝見して、IKKIさんがおっしゃるように既に公開されている
マクロを改造して出来ることも多い事がわかりました。
私はマクロの初心者で、まったく意味がわからない言葉がならんでいるように見えま
したが、
お教え頂きましたことと照らし合わせてみて、どのような意味があるのかが、ほんの
少しわかってきたような気が致します。
これからマクロを勉強してみたいという気にもなって参りました!


これから早速これを使い作業をしたいと思います。
この度はお教え頂き本当にありがとうございました!!

[ ]
RE:05332 任意の文字で改行をするようなマNo.05333
yasuyyasu さん 06/11/26 09:22
 
おはようございます。
昨日に引き続き、またまた質問させて頂きます。

昨日お教え頂きました【行末に文字を追加】マクロを使用しておりましたところ、1
点疑問点が出て参りましたのでお教え頂けると幸いです。

例えば

ああああ(改行)
いいいい(改行)
うううう(改行)
ええええ(改行)
おおおお

というテキストの行末に「。」を追加しようとすると
全範囲、指定範囲ともに、最終行の<おおおお>にだけ「。」が追加されません。

ああああ(改行)
いいいい(改行)
うううう(改行)
ええええ(改行)
おおおお(改行)

のように<おおおお>の後に改行を入れると全範囲、指定範囲ともに「。」が追加さ
れます。

最終行末に改行を入れなくても文字を追加する為には、どうすればいいのでしょうか?
何度も申し訳ございませんがお教え頂けると幸いです。
よろしくお願い申し上げます。

参考までに昨日お教え頂きましたマクロです

------------------------------------------------------------------
// 行末に文字を追加
$s = "$";
$r = input("行末に追加する文字列");
if ($r == "") endmacro;
if (selecting) replaceallfast $s, $r, regular, inselect;
else replaceallfast $s, $r, regular;
if (result) message str(result) + "個の置換を行ないました。";
else beep;
------------------------------------------------------------------

[ ]
RE:05333 任意の文字で改行をするようなマNo.05334
K'zawa さん 06/11/26 11:25
 
yasuyyasuさん、こんにちは。
K'zawaです。

>最終行末に改行を入れなくても文字を追加する為には、どうすればいいのでしょう
>か?

これは、正規表現「$」が改行のみを行末とする仕様のようです。
なのでこれを避けるには、
予めファイル末尾が空行になるようにしておくのが一番いいのですが…。

そうもいってられない場合は、
マクロの始めで、ファイル末の状態を確認し、
最後に、必要なら元に戻します。

マクロの難易度はアップしますね。


---------------------------------------------
// 範囲選択中なら変数で記憶し、解除
if(selecting){  //
  #sel=1;
  escape;
}

// 最終行の長さが0出なければ改行
gofileend;
if(linelen2 != 0){
  insert "\n";
  #ins = 1;
}

// 範囲選択を復元
if(#sel == 1){
  moveto seltopx,seltopy;
  beginsel;
  moveto selendx,selendy;
}


// ここに以前のマクロを入れる


// 改行を元に戻す処理(必要なければいらない)
if(#ins == 1){
  gofileend;
  if(linelen2 == 0) backspace;
}
---------------------------------------------

余談ですが、マクロを学ぶには、手動でやっていることをマクロにしたら
どうなるかを見てみるのが一番手っ取り早いと思います。
「キー操作の記録開始/終了」で操作を記録し、
「キー操作の保存」でマクロファイルとして保存し、
それを開いて見るとよいです。



[ ]
RE:05334 任意の文字で改行をするようなマNo.05339
yasuyyasu さん 06/11/26 12:14
 
K'zawaさん。こんにちは。昨日に引き続きご回答ありがとうございます!

またまた希望とおりの処理が出来ました!感謝申し上げます!

いざマクロの勉強をしようとしても何をどうやって進めていけばいいのか悩んでおり
ました。
とりあえず本を読んだ方がいいのかなと思い、
昨日、早速通販で「秀丸エディタ 正規表現&マクロ 厳選テクニック」という本を
注文してみました。
まだ届いておりませんが、この本も初心者の私に理解できるのかどうか不安がござい
ますが、
せっかくの機会ですので、がんばってみようと思います。

K'zawaさんに教えて頂いた記録したマクロを開いて見てみるという方法は思いつきも
しませんでした・・・
なるほど!みなさんこうやってらっしゃるんですね!

昨日、本日と色々をお教え頂きありがとうございました!
とっても勉強になりました!!

[ ]
RE:05334 任意の文字で改行をするようなマNo.05343
yasuyyasu さん 06/11/27 16:01
 
こんにちは。昨日に引き続きまた質問させていただきます。
連日質問させて頂き申し訳ございません!

昨日お教え頂きました、「最終行末に改行を入れなくても文字を追加」するマクロを
使っておりましたところ、
全範囲の追加は出来るのですが、範囲指定をするとうまくいきません。

ヘルプと照らし合わせて見てみたのですが、やはりマクロ初心者の私にはわかりませ
んでした・・・

皆様お忙しいところ大変申し訳ないのですが、またお教え頂けないでしょうか・・・
本当に申し訳ございませんがよろしくお願い申し上げます。

[ ]
RE:05343 任意の文字で改行をするようなマNo.05344
K'zawa さん 06/11/27 22:20
 
yasuyyasuさん、こんにちは。
K'zawaです。

>全範囲の追加は出来るのですが、範囲指定をするとうまくいきません。

原因は範囲選択と思われます。
問題が起きているのは前の話の最終行のところでしょうか?
その場合は、No.05334のマクロの、

---------------------------------------------
// 最終行の長さが0出なければ改行
gofileend;
if(linelen2 != 0){
  insert "\n";
  #ins = 1;
}

// 範囲選択を復元
if(#sel == 1){
  moveto seltopx,seltopy;
  beginsel;
  moveto selendx,selendy;
}
---------------------------------------------

の部分を、

---------------------------------------------
// 最終行の長さが0出なければ改行
gofileend;
if(linelen2 != 0){
  if(#sel == 1 && x == selendx && y == selendy) #selfileend = 1;
  insert "\n";
  #ins = 1;
}

// 範囲選択を復元
if(#sel == 1){
  moveto seltopx,seltopy;
  beginsel;
  if(#selfileend == 1) gofileend;
  else moveto selendx,selendy;
}
---------------------------------------------

のように直して下さい。

これとは別に、ユーザー側の範囲選択のしかたが悪いケースも考えられますが…。

[ ]
RE:05344 任意の文字で改行をするようなマNo.05345
yasuyyasu さん 06/11/27 22:56
 
K'zawaさん。こんばんは。
昨日に引き続き、ご回答ありがとうございます。

お教え頂きました通りにやってみたのですが、うまくいきません・・・。
1行目を含んだ範囲選択をして実行すると、1行目の行末にだけ追加されます。
2行目以下の範囲で範囲選択すると何も追加されません。
そして全範囲選択をしてみると1行目の行末にだけ追加になります。
<ここでいう全範囲は任意で全範囲を指定(全範囲を反転させての選択)の場合で、
特には範囲を指定しない時の全範囲とは違います)>

もしかすると私の範囲指定の仕方が悪いのでしょうか・・・
この機能があるととても作業がはかどるのであると大変助かるので、
もしよろしければお教え頂けるとうれしいです。
よろしくお願い申し上げます。

[ ]
RE:05345 任意の文字で改行をするようなマNo.05346
K'zawa さん 06/11/28 00:47
 
K'zawaです。

>1行目を含んだ範囲選択をして実行すると、1行目の行末にだけ追加されます。
>2行目以下の範囲で範囲選択すると何も追加されません。
>そして全範囲選択をしてみると1行目の行末にだけ追加になります。

なんだかよくわからない状況ですね。

>もしかすると私の範囲指定の仕方が悪いのでしょうか・・・

検索・置換の範囲指定は行単位とのことなので、基本的に行の先頭から始まり
行の先頭で終わります。
ここで言う行は改行文字を含みますので、カーソルは次の行の先頭です。
(なので文字列の後ろでファイルが終わっていてはまずいわけです。
  そのあたりを先ほど修正しました。)

上記のように範囲指定してもうまくいかない時は
実際に使っているマクロを見てみないと分からないかもしれません。


[ ]
RE:05346 任意の文字で改行をするようなマNo.05347
yasuyyasu さん 06/11/28 01:04
 
K'zawaさん 夜遅くにもかかわらずありがとうございます。

行の先頭から始めて行の先頭で終わりにしてみたのですが結果は同じでした。
うまくいかないマクロは、お教え頂いたものをそのまま使用しておりまして、下記の
ものとなります。
まだ自分では意味が解読できず、まったくお手上げの状態です・・・

範囲指定の行末追加がうまくいかないのはこれです

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

// 範囲選択中なら変数で記憶し、解除
if(selecting){  //
  #sel=1;
  escape;
}

// 最終行の長さが0出なければ改行
gofileend;
if(linelen2 != 0){
  if(#sel == 1 && x == selendx && y == selendy) #selfileend = 1;
  insert "\n";
  #ins = 1;
}

// 範囲選択を復元
if(#sel == 1){
  moveto seltopx,seltopy;
  beginsel;
  if(#selfileend == 1) gofileend;
  else moveto selendx,selendy;
}

// 行末に文字を追加
$s = "$";
$r = input("行末に追加する文字列");
if ($r == "") endmacro;
if (selecting) replaceallfast $s, $r, regular, inselect;
else replaceallfast $s, $r, regular;
if (result) message str(result) + "個の置換を行ないました。";
else beep;

// 改行を元に戻す処理(必要なければいらない)
if(#ins == 1){
  gofileend;
  if(linelen2 == 0) backspace;
}

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

範囲選択の場合のみがうまくいかないだけなので、
解決しなくても、愛用し続けることは確実なのですが、
全範囲指定しない時には範囲選択部分の行末追加が出来ると更に便利でありがたいで
す。
本当に何度もすみません!

[ ]
RE:05347 任意の文字で改行をするようなマNo.05348
K'zawa さん 06/11/28 08:54
 
K'zawaです。

判明しました。

範囲選択解除後も残っている座標値を利用していたのですが、
後付けした
if(#sel == 1 && x == selendx && y == selendy) #selfileend = 1;
で参照すると更新されてしまうようです。(selendx,selendyキーワード)
なので変数に切り替え。

大変失礼致しました。

---------------------------------------
// 範囲選択中なら変数で記憶し、解除
if(selecting){
  #sel=1;
  #tx = seltopx;  #ty = seltopy;
  #ex = selendx;  #ey = selendy;
  escape;
}

// 最終行の長さが0でなければ改行
gofileend;
if(linelen2 != 0){
  if(#sel == 1 && x == #ex && y == #ey) #selfileend = 1;
  insert "\n";
  #ins = 1;
}

// 範囲選択を復元
if(#sel == 1){
  moveto #tx,#ty;
  beginsel;
  if(#selfileend == 1) gofileend;
  else moveto #ex,#ey;
}

// ーーー以下省略ーーー

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

あと、コメントの誤記:出なければ→でなければ


[ ]
RE:05348 任意の文字で改行をするようなマNo.05349
yasuyyasu さん 06/11/28 09:29
 
K'zawaです。 おはようございます。

お教え頂きましたものを試してみたところ、完璧です!
座標等の私には理解できない事も関係していたのですね。
やはり少しは自分で意味がわかるように学んでいかなければいけないと痛感致してお
ります。

何度も何度も丁寧にお答え頂きありがとうございました!
今日も、このマクロを使用して仕事を致します!
便利なマクロをお教え頂き感謝申し上げます。

[ ]
RE:05349 任意の文字で改行をするようなマNo.05350
yasuyyasu さん 06/11/28 09:47
 
K'zawaさん おはようございます。

と言いたかったところを

K'zawaです。 おはようございます。

と言ってしまいました・・・。スミマセン・・・

[ ]
RE:05348 任意の文字で改行をするようなマNo.05351
山紫水明 さん 06/11/28 20:09
 
 K'zawaさん,横から失礼します。
 
>if(#sel == 1 && x == selendx && y == selendy) #selfileend = 1;
>で参照すると更新されてしまうようです。(selendx,selendyキーワード)

よいうより,カーソル移動後の beginsel 文で更新されるようですね。

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

[ ]
RE:05351 任意の文字で改行をするようなマNo.05352
K'zawa さん 06/11/28 21:02
 
山紫水明さん、こんにちは。
K'zawaです。

>よいうより,カーソル移動後の beginsel 文で更新されるようですね。

そうですね。元から駄目だったんですねぇ。
失礼しました。

[ ]