◀マクロトップへ
  • 400 相対パスにある同名のCもしくはHファイルを開く
    • 401 RE: 相対パスにある同名のCもしくはHファイルを開く
      • 402 Re2: 相対パスにある同名のCもしくはHファイルを開く
  • [400] 相対パスにある同名のCもしくはHファイルを開く Hiro 2007年09月30日 01:58

    マクロについてほとんど判らない素人です。
    やりたいことを以下記載しますので、皆様の知恵を拝借ください。

    【やりたいこと】
    現在編集中のCソースファイルもしくはH(ヘッダファイル)と同一ファイル名のCソースファイルもしくはヘッダファイルを開きたい。
    ただし、CソースファイルとH(ヘッダ)ファイルは下図の通りフォルダが分かれている。
    //
    |
    +--- include ←このフォルダにヘッダファイルがある。
    |
    +--- src ←このフォルダにCソースファイルがある。

    【よく似たコマンド】
    メニューバーで「検索」→「同名のC/C++ヘッダ(ソース)を開く」というコマンドがあります。
    しかし、このコマンドは現在編集しているファイルがある同一フォルダ内でしか検索してくれません。


    • [401] RE: 相対パスにある同名のCもしくはHファイルを開く すい 2007年09月30日 05:51

      地道にヤルしかないんじゃないかと。
      -----↓以下↓-----
      // TAB=4
      // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
      // マクロファイルの拡張子は .PPA でなくてはなりません。

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

      // フルパスファイル名(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 ); //}

      // ファイル名(Fname)をファイル名(Fname)と拡張子(Ext)に分離する。
      Ext := Fname;
      Fname := '';
      repeat //{
      pt := Pos( '.' , Ext );
      if( pt > 0 ) then begin
      Fname := Fname + Copy ( Ext , 1 , pt );
      Ext := Delete( Ext , 1 , pt );
      end;
      until ( pt <= 0 ); //}
      if (Fname = '') then begin //{
      Fname :=Ext;
      Ext := '';
      end; //}

      // 拡張子毎に、新たに開くファイルのフルパスを生成する
      NewPath := '';
      Ext := UpperCase(Ext);
      if (Ext = 'C') or (Ext = 'CPP') then NewPath := PDir + 'include\' + Fname + 'H'
      else if (Ext = 'H') then NewPath := PDir + 'src\' + Fname + 'C'
      ;

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

      // NewPath が空で無ければ開く
      if (NewPath <> '') then S_FileOpen(NewPath);
      end; //}
      • [402] Re2: 相対パスにある同名のCもしくはHファイルを開く Hiro 2007年09月30日 19:07

        To すいさん

        動作確認し、正常に動作しました。
        これで、快適にプログラミングが出来そうです。
        本当に助かりました。ありがとうございます。