添付ファイルの情報



[添付ファイル一覧] [全ページの添付ファイル一覧]

fileINVCMP.PPA
格納ファイル名:attach/4D6163726F2FC5EAB9C62F313338_494E56434D502E505041
ページ:Macro/投稿/138
格納ファイル名:attach/4D6163726F2FC5EAB9C62F313338_494E56434D502E505041
MD5ハッシュ値:bb0060ae52f5388885638fd86df2eede
サイズ:4.2KB (4281 bytes)
Content-type:application/octet-stream
登録日時:2006/07/30 16:27:37
アクセス数:428
MD5ハッシュ値:bb0060ae52f5388885638fd86df2eede
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;
 




    


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS