Macro/投稿/132

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F132


Top > Macro > 投稿 > 132

連番生成

  • ページ: Macro/投稿
  • 作者: すい?
  • カテゴリー: ppa
  • 投稿日: 2002-12-17 (火) 04:29:46

メッセージ

fileDUPLINC.PPA
  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;
 
fileDUPLINCX.PPA
  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;
 


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル: fileDUPLINCX.PPA 331件 [詳細] fileDUPLINC.PPA 455件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2006-07-30 (日) 04:31:03 (4466d)