ファイルが開いているかどうかについてNo.00271
zoom さん 05/11/08 02:16
 
こんばんわ

秀丸が開いているファイルの確認方法で教えて下さい。
ファイルを順番にオープンして処理するマクロを作っており、
既に開かれている場合は開かないようにしようとしたのですが、
どうもその判定がうまくいきません。
ファイルを開いているのですがfindhidemaruで-1となります。
ヘルプを見ると「自分自身はfindhidemaruの対象とはなりません。」
とありました。(確かに対象のファイルからマクロを実行)
0が帰ってくるかと期待したのですが...
他の判定方法も色々考えたのですがうまい方法が見つかり
ませんでした。
何かいいアイデアがあれば教えて下さい。

秀丸 V5.09
WinXP Pro SP2

[ ]
RE:00271 ファイルが開いているかどうかにNo.00272
アルビレオ さん 05/11/08 02:38
 
アルビレオです。

>ファイルを開いているのですがfindhidemaruで-1となります。
>ヘルプを見ると「自分自身はfindhidemaruの対象とはなりません。」
>とありました。(確かに対象のファイルからマクロを実行)
>0が帰ってくるかと期待したのですが...
>他の判定方法も色々考えたのですがうまい方法が見つかり
>ませんでした。

「現在編集中のファイル名」は組み込み変数 filename で取得できます。
findhidemaru と組み合わせて使えば判定できると思います。

[ ]
RE:00272 ファイルが開いているかどうかにNo.00273
zoom さん 05/11/08 12:19
 
コメントありがとうございます。

>「現在編集中のファイル名」は組み込み変数 filename で取得できます。
>findhidemaru と組み合わせて使えば判定できると思います。
filenameでは以下の文で-1が帰って来ていました。
    #n = findhidemaru(filename);
    message filename + ":" + str(#n);
このあたりは既に色々試しましたが知恵が足りないせいか
うまく出来ませんでした。
ただし、対象のファイルが最前面で無い場合は正常にいきました。
(やはり最前面のfindhidemaruは不可なのでしょう)
別のロジックを考えないといけないですね。

[ ]
RE:00273 ファイルが開いているかどうかにNo.00275
アルビレオ さん 05/11/08 17:49
 
アルビレオです。

>filenameでは以下の文で-1が帰って来ていました。
>    #n = findhidemaru(filename);
>    message filename + ":" + str(#n);

それは正しい動作だと思うのですが。

>ファイルを順番にオープンして処理するマクロを作っており、
>既に開かれている場合は開かないようにしようとしたのですが、

ということなので、

$fname="開きたいファイル名";//フルパスで英字はすべて小文字に
if($fname!=filename){
  #n = findhidemaru($fname);
  if(#n>0){
    setactivehidemaru #n;
  }else{
    openfile $filename;
  }
}

あるいは

$fname="開きたいファイル名";//フルパスで英字はすべて小文字に
#n=0;
while(#n<hidemarucount){
  if($fname==filename[#n]){
    setactivehidemaru #n;
    goto _find;
  }
  #n=#n+1;
}
openfile $filename;
_find:

とすれば指定したファイルが必ずアクティブになると思います。

[ ]
RE:00275 ファイルが開いているかどうかにNo.00279
zoom さん 05/11/08 23:21
 
ありがとうございます。

教えていただいたのを参考にして正常動作するように
なりました。
※finedhidemaruは使った事がなかったので勝手に0が
  帰るものだと勘違いして悩んでいました。
  みなさんにとっては当然の事なんでしょうけど...

あと投稿する会議室が間違っていたようですね。
失礼しました。

[ ]