[スレッド全体]

2008/12/13 (土) 03:34:13  
[453] RE: 指定された文字列を取得するマクロ

// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。

var        // 変数確保
        gstr:String;                // 見つけた文字列を格納していくための文字列変数 gstr 確保
        sstr,ends:String;        // 文字列変数 sstr,ends 確保
        find:String;                // 検索結果格納用の文字列変数 find 確保
        CR,LF,CRLF:String;        // 改行コード格納用文字列変数を確保
        pt:Integer;                        // 整数数値変数 pt 確保
begin        //{
        //↓ CR LF 改行コードを代入する
        CRLF := '
';
        CR := Copy(CRLF,1,1);        // CR改行コードのみ取り出す
        LF := Copy(CRLF,2,1);        // LF改行コードのみ取り出す

        sstr := InputBox( '検索文字列入力', '指定文字列を入力してください。(正規表現)' , '' );
        if ( sstr = '' ) then        Exit;        // 空なら終了
 
        ends := InputBox( '終端文字列入力', '終端の文字列を入力してください。' , '' );
        if ( ends = '' ) then        Exit;        // 空なら終了

        gstr := '';        // 「見つけた文字列を格納していく文字列変数」を空にしておく。
        while (True) do        begin        //{
                // ↓検索文字列と終端文字列を検索
                S_SearchNext( sstr + '|' + ends , $16 );        // 次を検索 $16=0001.0110(2進数)
                                                                                                        // 検索ダイアログを自動的に閉じる
                                                                                                        // 正規表現
                                                                                                        // 英大文字と小文字を区別する
                S_ReDraw(0);        // 再描画

                find := S_GetSelectedString(0);        // 検索実行後に選択されている文字列(見つけた文字列)を find に取得

                // ↓検索結果文字列 find 中に改行コードが含まれていたら削除する。
                pt := Pos(CR,find);        if( pt > 0 ) then        find := Copy(find,1,pt-1);
                pt := Pos(LF,find);        if( pt > 0 ) then        find := Copy(find,1,pt-1);

//                MessageBox( '↓これまでに見つけた文字列' +LF+ '-----' +LF+ gstr + '-----' +LF+ '↓今回見つけた文字列' +LF+ '[' + find + ']' , 'DEBUG' , 0 );        // for DEBUG
                S_Right(0);        // カーソル右移動

                if ( find = ends ) then        Break;        // 見つけたのが終端文字列だった - ループ脱出

                if ( find = '' ) then        begin        //{
                        // 検索結果が空だった == 何も見つからなかった
                        // 終端文字列も見つからないまま、最後まで検索完了してしまった場合
                        S_AddTail( CRLF + '__end_of_text__' );        // 最後にテキストを追加 - ファイル末尾へ飛んで行き、そこに指定された文字列を書き込む。
                        Break;        // 検索文字列も終端文字列も無い
                end;        //}

                // 検索結果文字列を gstr に追加格納していく。
                gstr := gstr + find + CRLF;
        end;        //}

        S_InsText( CRLF + gstr );        // 文字列を書き出す
end.        //}
すい
INCM1.23c

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81