Macro/投稿/138

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


Top > Macro > 投稿 > 138

演算子の前後を入れ替える

  • ページ: Macro/投稿
  • 作者: すい?
  • カテゴリー: ppa
  • 投稿日: 2003-02-01 (土) 21:11:24

メッセージ

文字列を範囲選択してから実行すると、選択範囲(先頭の1行のみ)内の文字列を 演算子の前後を入れ替えます。例えば

if( ch <= 'A' )

で「 ch <= 'A' 」を範囲選択してから実行すると

if( 'A' <= ch )

となります。

演算子として判定されるのは、最も文字列の前方にある <=>! 何れかの文字列です。

fileINVCMP.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
// 演算子の前後を入れ替える。
 
// TAB=4
// 実行には PPA.DLL が必須です。PPA.DLL を入手して sakura.exe と同じフォルダに入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。
 
// 文字列を範囲選択してから実行すると、選択範囲(先頭の1行のみ)内の文字列を
// 演算子の前後を入れ替えます。例えば
// ・if( ch <= 'A' )
// で「 ch <= 'A' 」を範囲選択してから実行すると
// ・if( 'A' <= ch )
// となります。
// 演算子として判定されるのは、最も文字列の前方にある <=>! 何れかの文字列です。
 
var
	str:String;
	idt,p1,cnd,p2,bk:String;
	ch:String;
	pt,sh,nm:Integer;
	// for debug
	CRLF,mess:String;
begin
	str := S_GetSelectedString(0);		// 選択部分の文字列を取得
 
	// 以降で、選択範囲文字列 str から
	// ・idt:先頭部分のタブ・スペース類
	// ・p1 :演算子の前の文字列(先頭・末尾のタブ・スペース類を含まない)
	// ・cnd:演算子、及び、その前後のタブ・スペース類
	// ・p2 :演算子の後ろの文字列(先頭・末尾のタブ・スペース類を含まない)
	// ・bk :末尾部分のタブ・スペース類
	// に分けていく。
 
	// 比較演算子の先頭位置を sh に取得する。
	sh := Length(str);
	pt := Pos('<',str);	if( (pt <> 0)and(pt < sh) )	then	sh := pt;
	pt := Pos('>',str);	if( (pt <> 0)and(pt < sh) )	then	sh := pt;
	pt := Pos('=',str);	if( (pt <> 0)and(pt < sh) )	then	sh := pt;
	pt := Pos('!',str);	if( (pt <> 0)and(pt < sh) )	then	sh := pt;
	// sh = 演算子の先頭位置
 
	// 演算子文字の文字数を nm に取得する。
	nm := 0;
	for pt := sh to Length(str)	do
	begin
		ch := Copy(str,pt,1);
		if( (ch <> '<')and(ch <> '>')and(ch <> '=')and(ch <> '!') ) then	break;	// 演算子文字でなければループ脱出
		nm := nm + 1;
	end;
 
	p1  := Copy  ( str , 1  , sh - 1      );	// p1  := 演算子の前まで(演算子含まない)の文字列
	cnd := Copy  ( str , sh , nm          );	// cnd := 演算子部分の文字列
	p2  := Delete( str , 1  , sh - 1 + nm );	// p2  := 演算子より後ろ(演算子含まない)の文字列
 
	// *** p1 末尾のタブ・スペース類を cnd 先頭に移動する。 *** //
	str := p1;				// str := p1 そのまま
	p1  := TrimRight(p1);	// p1  := 末尾のタブ・スペース類を取り除いた文字列
	// str と p1 の文字数の差が「元の p1 の末尾部分にあったタブ・スペース類の文字数」である。
	// この値を利用して、末尾部分のタブ・スペース類を cnd 先頭に追加する。
	cnd := Copy( str , Length(p1)+1 , Length(str)-Length(p1) ) + cnd;
 
	// *** p2 先頭のタブ・スペース類を cnd の末尾に移動する。 *** //
	str := p2;				// str := p2 そのまま
	p2  := TrimLeft(p2);	// p2  := 先頭のタブ・スペース類を取り除いた文字列
	// str と p2 の文字数の差が「元の p2 の先頭部分にあったタブ・スペース類の文字数」である。
	// この値を利用して、先頭部分のタブ・スペース類を cnd 末尾に追加する。
	cnd := cnd + Copy( str , 1 , Length(str)-Length(p2) );
 
	// *** p1 先頭のタブ・スペース類を idt に移動する。 *** //
	str := p1;				// str := p1 そのまま
	p1  := TrimLeft(p1);	// p1  := 先頭のタブ・スペース類を取り除いた文字列
	// str と p1 の文字数の差が「元の p1 の先頭部分にあったタブ・スペース類の文字数」である。
	// この値を利用して、先頭部分のタブ・スペース類を idt に格納する。
	idt := Copy( str , 1 , Length(str)-Length(p1) );
 
	// *** p2 末尾のタブ・スペース類を cnd 先頭に移動する。 *** //
	str := p2;				// str := p2 そのまま
	p2  := TrimRight(p2);	// p2  := 末尾のタブ・スペース類を取り除いた文字列
	// str と p2 の文字数の差が「元の p2 の末尾部分にあったタブ・スペース類の文字数」である。
	// この値を利用して、末尾部分のタブ・スペース類を cnd 先頭に追加する。
	bk := Copy( str , Length(p2)+1 , Length(str)-Length(p2) );
 
 
	// for Debug 取得した情報をダイアログに表示する。
	CRLF := '
';
//	mess := '';
//	mess := mess + '[' + idt + ']' + CRLF;
//	mess := mess + '[' + p1  + ']' + CRLF;
//	mess := mess + '[' + cnd + ']' + CRLF;
//	mess := mess + '[' + p2  + ']' + CRLF;
//	mess := mess + '[' + bk  + ']' + CRLF;
//	mess := mess + '--------------------' + CRLF;
//	mess := mess + '[' + str + ']' + CRLF;
//	MessageBox( mess,'Debug',0 );
//	Exit();
 
	if ( p1  = '' )	then	Exit();		// p1  (演算子の前の物)が空なら何もせず終了
	if ( cnd = '' )	then	Exit();		// cnd (演算子部分)が空なら何もせず終了
	if ( p2  = '' )	then	Exit();		// p2  (演算子の後ろの物)が空なら何もせず終了
 
	S_InsText( idt + p2 + cnd + p1 + bk );	// p1 と p2 を入れ替えてエディタへ書き出す。
end;
 


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

添付ファイル: fileINVCMP.PPA 321件 [詳細]

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