○第98回目 QXマクロの紹介(その9)
※QXマクロは、QXエディタ(テキストエディタ)で使用されるマクロのことです。
QXマクロでは、全角スペースはデータ以外は認められていません。コピーして使う場合は、必ず半角スペースに変えてください。
13.あの行をコピーして、中を逆転させればいいのではないか(特にマクロでは、"="の前後を変えたいということがよく起こります)
14.前後の行を逆転させたい。一行の移動も一種の逆転でしょうか。含めましょう。
13.あの行をコピーして、中を逆転させればいいのではないか(特にマクロでは、"="の前後を変えたいということがよく起こります)
どの文字を区切りとするかの指定が必要です。初期値としてはTABを設定します。
複数行を対象にできたほうが便利かと思います。
処理の中心部分は非常に簡単です。
1.指定範囲の行数を取得する
2.区切り記号を入力する
3.行の内容を取得
4.区切り記号がある場所を探す。
5.区切り記号より後ろの文字列 & 区切り記号 & 区切り記号より前の文字列
6.新しい文字列を書き込む。
7.既存の行を削除する
8.これを指定範囲内の行で行なう
1.指定範囲の行数を取得する
定番の処理です。
'選択範囲を記憶
y_begin = @SelectStartLine
y_end = @ScrLineToCrLine(@SelectEndLine) 'これは論理的行
@BlockSelectEnd
if y_begin = 0 then
y_begin = 1
y_end = @ScrLineToCrLine(@LastLine) 'これは論理的行
end if
2.区切り記号を入力する
'指定文字の入力
msg$ = "区分となる指定文字列をいれてください;タブの場合は0"
in1$ = inputbox$(msg$,"QX 文字列の逆転","0")
if in1$ = "0" then
rr$ = chr$(&H 9) 'TABのこと
else
rr$ = in1$
end if
in11 = len(rr$)
3.行の内容を取得
a$ = @TextCr$(@Line)
4.区切り記号がある場所を探す。
p1 = instr(a$,rr$)
5.区切り記号より後ろの文字列 & 区切り記号 & 区切り記号より前の文字列
if p1 <> 0 then
mm1$ = left$(a$,p1-1)
mm2$ = mid$(a$,p1+in11)
6.新しい文字列を書き込む。
@MoveBeginningLine
@Insert mm2$
@Insert rr$
@Insert mm1$
@InsertF "\n"
7.既存の行を削除する
@DeleteLineCr
@MoveUpChar
end if
8.これを指定範囲内の行で行なう
do
:
@MoveNextLineCr
loop while @ScrLineToCrLine(@Line) <>
14.前後の行を逆転させたい。一行の移動も一種の逆転でしょうか。含めましょう。
入力値を3とすれば、現在行を含めて下3行を対象にし逆転するという意味とします。
入力値を*3とすれば、現在行を含めて3行下の行を現在行の上に移動するという意味とします。
まず、入力値を分解し、逆転か移動かの区分、対象行数を取得します。行数の初期値としては、2が便利です。2行逆転はよく使います。
次に、対象行を配列変数に格納します。最大20行もあればいいでしょう。
現在行から見て、入力値の分だけ格納します。削除も同時に行います。
挿入は、逆から行ないます。以下参照
'読み込み処理。
for i = 0 to p1-1 'p1は入力された行数
mm$[i] = @TextCr$(@Line)
@DeleteLineCr '当該行を削除
next
'コピー
for i = p1 to 0
@Insert mm$[i]
@InsertF "\n"
next
一行移動の場合も、読み込み処理までは同じで、コピーするときに、2,1,0と書き込む代わりに、2,0,1とすれば十分かと思われます。
今のは下の行に対してですが、上の行に対しても考えてみてください。入力値は-3、*-3とかにします。
成功を祈ります。

0 件のコメント:
コメントを投稿