[添付ファイル一覧]
[全ページの添付ファイル一覧]
- DUPLINCX.PPA
- 格納ファイル名:attach/4D6163726F2FC5EAB9C62F313332_4455504C494E43582E505041
- ページ:Macro/投稿/132
- 格納ファイル名:attach/4D6163726F2FC5EAB9C62F313332_4455504C494E43582E505041
- MD5ハッシュ値:60129ba593a298515b5ccc8e888b0613
- サイズ:4.8KB (4933 bytes)
- Content-type:application/octet-stream
- 登録日時:2006/07/30 04:30:42
- アクセス数:461
- MD5ハッシュ値:60129ba593a298515b5ccc8e888b0613
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); // 現在位置を移動履歴に登録
//
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); // 現在位置を移動履歴に登録
//
S_MoveHistPrev(0); // 移動履歴: 前へ
end;
|