◀マクロトップへ
  • 558 編集中のファイルパスを遡ってGrep
    • 559 Re:編集中のファイルパスを遡ってGrep
      • 560 Re2:編集中のファイルパスを遡ってGrep
        • 561 Re3:編集中のファイルパスを遡ってGrep
  • [558] 編集中のファイルパスを遡ってGrep つんつく 2012年08月08日 21:08

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

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

    どなたかアドバイスをお願いします
    • [559] Re:編集中のファイルパスを遡ってGrep つんつく 2012年08月10日 00:13

      <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;
      //}
      • [560] Re2:編集中のファイルパスを遡ってGrep ♂つくん♂ 2012年08月10日 21:29

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

        家のWin7じゃOKだけど会社のXPじゃダメ。
        なんだろう?
        • [561] Re3:編集中のファイルパスを遡ってGrep ♂つくん♂ 2012年08月13日 00:25

          // カーソル語をルート直下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;
          //}