[▲前のスレッド]

2012/8/8 (水) 21:08:09  
[558] 編集中のファイルパスを遡ってGrep

マクロ初心者です。
次のようなマクロを作成したいのですが・・

編集中のファイルパスを遡ってGrepしたい。
<例>
D:\project\oooo\abc.c を編集中にカーソル上の単語を
@"D:\"
A"D:\project"
を対象にGrepしたいのです。
@Aは別マクロでキーに割り当てます。
対象ファイルは"*.c *.h *.cpp"

どなたかアドバイスをお願いします
つんつく
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/10 (金) 00:13:17  
[559] Re:編集中のファイルパスを遡ってGrep

<400>相対パスにある同名のCもしくはHファイルを..
を参考に作成してみました(初マクロ)

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

var                // 変数を確保する場所
        NewPath:String;
        FullPath:String;
        PDir,Dir,Fname,Ext:String;
        pt:Integer;                // 整数数値変数
        NL:String;
        CurWord:String;
begin        // ここより処理内容        //{
        // ↓改行を用意
        NL := '
';
        FullPath := S_GetFilename();        // 編集中のファイル名を取得する
        CurWord := S_ExpandParameter('$C');        //

        // フルパスファイル名(FullPath)をディレクトリ(Dir)とファイル名(Fname)に分離する。
        Fname := FullPath;
        Dir := '';
        repeat        //{
                pt := Pos( '\' , Fname );
                if( pt > 0 ) then        begin
                        Dir   := Dir + Copy  ( Fname , 1 , pt );
                        Fname :=       Delete( Fname , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        // ディレクトリ(Dir)を親ディレクトリ(PDir)とディレクトリ(Dir)に分離する。
        if ( Length(Dir) > 3 )        then        Dir := Delete(Dir,Length(Dir),1);
        PDir := '';
        repeat        //{
                pt := Pos( '\' , Dir );
                if( pt > 0 ) then        begin
                        PDir := PDir + Copy  ( Dir , 1 , pt );
                        Dir  :=        Delete( Dir , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        NewPath := PDir ;

//         // ↓for デバッグ
//         MessageBox(
//         '[' + NewPath                + ']' + NL +
//         '[' + FullPath                + ']' + NL +
//         '[' + PDir                        + ']' + NL +
//         '[' + Dir                        + ']' + NL +
//         '[' + Fname                        + ']' + NL +
//         '' , '確認' , 0 );

        // NewPath が空で無ければ開く
        if (NewPath <> '')        then        S_Grep(CurWord,'*.cpp;*.c;*.h',NewPath,1);
end;
//}
つんつく
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/10 (金) 21:29:10  
[560] Re2:編集中のファイルパスを遡ってGrep

これじゃダメだってことが判った。

家のWin7じゃOKだけど会社のXPじゃダメ。
なんだろう?
♂つくん♂
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/13 (月) 00:25:41  
[561] Re3:編集中のファイルパスを遡ってGrep

// カーソル語をルート直下SubDirでGrep
// GrepSubDirCurWord.ppa

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

var                // 変数を確保する場所
        NewPath:String;
        FullPath:String;
        PDir,Dir,Fname,Ext:String;
        pt:Integer;                // 整数数値変数
        NL:String;
        CurWord:String;
        Cnt:Integer;                // 整数数値変数
begin        // ここより処理内容        //{
        // ↓改行を用意
        NL := '
';
        FullPath := S_GetFilename();        // 編集中のファイル名を取得する
        CurWord := S_ExpandParameter('$C');        //

        // フルパスファイル名(FullPath)をディレクトリ(Dir)とファイル名(Fname)に分離する。
        Fname := FullPath;
        Dir := '';
        repeat        //{
                pt := Pos( '\' , Fname );        //'
                if( pt > 0 ) then        begin
                        Dir   := Dir + Copy  ( Fname , 1 , pt );
                        Fname :=       Delete( Fname , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        // ディレクトリ(Dir)を親ディレクトリ(PDir)とディレクトリ(Dir)に分離する。
        if ( Length(Dir) > 3 )        then        Dir := Delete(Dir,Length(Dir),1);
        PDir := '';
        Cnt := 0;
        repeat        //{
                pt := Pos( '\' , Dir );                //'
                if( pt > 0 ) then        begin
                        PDir := PDir + Copy  ( Dir , 1 , pt );
                        Dir  :=        Delete( Dir , 1 , pt );
                         Cnt := Cnt + 1;
                         if ( Cnt > 1 ) then break;
                 end;
        until ( pt <= 0 );        //}

        NewPath := PDir ;

         // ↓for デバッグ
//  MessageBox(
//  '[' + NewPath                + ']' + NL +
//  '[' + FullPath                + ']' + NL +
//  '[' + PDir                        + ']' + NL +
//  '[' + Dir                        + ']' + NL +
//  '[' + Fname                        + ']' + NL +
//  '' , '確認.end' , 0 );

        // NewPath が空で無ければ開く
        if ( Length(CurWord) > 1 )        then
                if (NewPath <> '')        then        S_Grep(CurWord,'*.cpp;*.c;*.h',NewPath,1);
        end;
end;
//}
♂つくん♂
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3

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