|
連番生成
- ページ: Macro/投稿
- 作者: すい?
- カテゴリー: ppa
- 投稿日: 2002-12-17 (火) 04:29:46
メッセージ
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
| // TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。
// DupLINC.PPA - DuplicateLine_INC
// 10進数 連番生成マクロ
// ★動作仕様
// ↓次のようなテキストがある場合( | がカーソル位置とします)
// --------------------------------------------------
// copy original.txt test|08.txt
// --------------------------------------------------
// ↓このマクロを実行すると、↓
// --------------------------------------------------
// copy original.txt test08.txt
// copy original.txt test|09.txt
// --------------------------------------------------
// という1行が増えます。そのまま何度もマクロの実行を続けると、
// --------------------------------------------------
// copy original.txt test08.txt
// copy original.txt test09.txt
// copy original.txt test10.txt
// copy original.txt test|11.txt
// --------------------------------------------------
// という具合に。。。
// なお、「カーソル位置より右の数値」が + 1 した値の行が増えていきます。
// 「カーソル位置より左の文字」は、たとえ数値であろうと無視して、そのままとなります。
//
// つまり、↓にて | の位置にカーソルがある場合は
// --------------------------------------------------
// copy original.txt test0|9.txt
// --------------------------------------------------
// ↓マクロを2回実行↓
// --------------------------------------------------
// copy original.txt test09.txt
// copy original.txt test010.txt
// copy original.txt test0|11.txt
// --------------------------------------------------
// となります。
var
n:Integer; // 作業用の整数数値変数 確保
nums:String; // カーソル位置の数値文字列を取り込む文字列変数 確保
numi:Integer; // 「↑nums を整数数値に変換した物」を格納する整数数値変数 確保
word,chr:String; // 作業用の文字列変数 確保
begin
S_DuplicateLine(0); // 行の二重化(折り返し単位)
S_MoveHistSet(0); // 現在位置を移動履歴に登録
// {
// カーソルの右側の単語を word に取得する。
S_WordRight_Sel(0); // (選択)単語の右端に移動
word := S_GetSelectedString(0); // 選択文字列を取得する
S_CancelMode(0); // 各種モードの取り消し - [Esc]キー - 選択を解除する
// }
S_MoveHistPrev(0); // 移動履歴: 前へ
// word 先頭の数値部分のみを nums に取り出す。<- 数値以外の部分まで StrToInt に投げると返値は強制的に 0 になっちゃうから、余計なゴミを消すわけさぁ。
nums := '';
for n := 1 to Length(word) do
begin
chr := Copy(word,n,1);
if( ( chr = '0' )or( StrToInt(chr) <> 0 ) ) then // word が数値文字('0'〜'9')である
nums := nums + chr // nums 末尾に chr を追加する。
else // 数値以外の文字だった場合
break // ループを脱出する。
;
end;
if ( nums = '' ) then exit; // 数値文字が無ければマクロ終了。
numi := StrToInt(nums); // nums を 10進数数値文字列とみなし、整数数値へ変換する。
// MessageBox( nums + '->' + IntToStr(numi) , '' , 0 ); // for Debug
numi := numi + 1; // increment ここで値を +1 している。ここを numi - 1 にすれば decrement版になるし、色々版できますな。ふぉっふぉっふぉっ。
word := IntToStr(numi); // numi を文字列に変換する。
// ↓書き込む数値文字列の前に、桁の不足分 '0' を追加する。
for n := Length(word) to (Length(nums) - 1) do word := '0' + word;
S_MoveHistSet(0); // 現在位置を移動履歴に登録
// {
for n := 1 to Length(nums) do S_Right_Sel(0); // (選択)カーソル右移動 - nums の文字数(数値文字数)分、選択 - 数値部分を選択する。
S_InsText(word); // 出来た数値文字列をエディタ画面へ挿入する。(↑の選択範囲が文字変数 word の内容に置き換わる)
// }
S_MoveHistPrev(0); // 移動履歴: 前へ
end;
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
| // TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。
// DupLINCX.PPA - DuplicateLine_INCX
// 16進数4桁(0〜0xFFFF)まで 連番生成マクロ
// ★カスタマイズ
// 最大桁数は keta の初期値で変更可能です。最大桁数指定を大きくする程、実行速度が遅くなるので注意。
// 16進の A〜F は英大文字で出力します。英小文字の a〜f にしたい場合は case of 〜 end; の箇所を書き換えてください。
// ★動作仕様
// ↓次のようなテキストがある場合( | がカーソル位置とします)
// --------------------------------------------------
// copy original.txt test|08.txt
// --------------------------------------------------
// ↓このマクロを実行すると、↓
// --------------------------------------------------
// copy original.txt test08.txt
// copy original.txt test|09.txt
// --------------------------------------------------
// という1行が増えます。そのまま何度もマクロの実行を続けると、
// --------------------------------------------------
// copy original.txt test08.txt
// copy original.txt test09.txt
// copy original.txt test0A.txt
// copy original.txt test|0B.txt
// --------------------------------------------------
// という具合に。。。
// なお、「カーソル位置より右の数値」が + 1 した値の行が増えていきます。
// 「カーソル位置より左の文字」は、たとえ数値であろうと無視して、そのままとなります。
//
// つまり、↓にて | の位置にカーソルがある場合は
// --------------------------------------------------
// copy original.txt test0|f.txt
// --------------------------------------------------
// ↓マクロを2回実行↓
// --------------------------------------------------
// copy original.txt test0f.txt
// copy original.txt test010.txt
// copy original.txt test0|11.txt
// --------------------------------------------------
// となります。
var
keta:Integer; // 整数数値 ⇒ 16進数文字列変換時の作業用 変換対象の桁
flg:Integer; // 整数数値 ⇒ 16進数文字列変換時の作業用 この桁を数値変換するかどうかのフラグ
n:Integer; // 作業用の整数数値変数 確保
nums:String; // カーソル位置の数値文字列を取り込む文字列変数 確保
numi:Integer; // 「↑nums を整数数値に変換した物」を格納する整数数値変数 確保
word,chr:String; // 作業用の文字列変数 確保
begin
S_DuplicateLine(0); // 行の二重化(折り返し単位)
S_MoveHistSet(0); // 現在位置を移動履歴に登録
// {
// カーソルの右側の単語を word に取得する。
S_WordRight_Sel(0); // (選択)単語の右端に移動
word := S_GetSelectedString(0); // 選択文字列を取得する
S_CancelMode(0); // 各種モードの取り消し - [Esc]キー - 選択を解除する
// }
S_MoveHistPrev(0); // 移動履歴: 前へ
// word 先頭の数値部分のみを nums に取り出す。<- 数値以外の部分まで StrToInt に投げると返値は強制的に 0 になっちゃうから、余計なゴミを消すわけさぁ。
nums := '';
for n := 1 to Length(word) do
begin
chr := Copy(word,n,1);
if( ( chr = '0' )or( StrToInt('$'+chr) <> 0 ) ) then // word が16進数値文字('0'〜'9','A'〜'F','a'〜'f')である
nums := nums + chr // nums 末尾に chr を追加する。
else // 数値以外の文字だった場合
break // ループを脱出する。
;
end;
if ( nums = '' ) then exit; // 数値文字が無ければマクロ終了。
numi := StrToInt('$'+nums); // nums を 16進数数値文字列とみなし、整数数値へ変換する。
// MessageBox( nums + '->' + IntToStr(numi) , '' , 0 ); // for Debug
numi := numi + 1; // increment ここで値を +1 している。ここを numi - 1 にすれば decrement版になるし、色々版できますな。ふぉっふぉっふぉっ。
// 数値 numi を 16進数の文字列にして文字変数 word に格納していく。
word := '';
// keta := $10000000; // $1000.0000 max $FFFF.FFFF まで
keta := $1000; // $1000 max $FFFFまで
flg := 0;
while( keta ) do // keta が 0 になるまでループ
begin
if( numi >= keta ) then flg := 1; // 以降の桁について数値化する。
if(flg) then
begin
n := numi div keta; // 整数 除算
numi := numi mod keta; // 整数 剰余
// MessageBox( 'keta = ' + IntToStr(keta) + '/n = ' + IntToStr(n) + '/numi = ' + IntToStr(numi) , '' , 0 ); // for Debug
case n of
0..9: word := word + IntToStr(n); // n = 0〜9 ⇒ 10進数文字列化する
10: word := word + 'A';
11: word := word + 'B';
12: word := word + 'C';
13: word := word + 'D';
14: word := word + 'E';
15: word := word + 'F';
end;
end;
keta := keta shr 4;
end;
// ↓書き込む数値文字列の前に、桁の不足分 '0' を追加する。
for n := Length(word) to (Length(nums) - 1) do word := '0' + word;
S_MoveHistSet(0); // 現在位置を移動履歴に登録
// {
for n := 1 to Length(nums) do S_Right_Sel(0); // (選択)カーソル右移動 - nums の文字数(数値文字数)分、選択 - 数値部分を選択する。
S_InsText(word); // 出来た数値文字列をエディタ画面へ挿入する。(↑の選択範囲が文字変数 word の内容に置き換わる)
// }
S_MoveHistPrev(0); // 移動履歴: 前へ
end;
|
|
|