テキストファイルの分割についてNo.05688
k_myyeh3782 さん 07/11/13 00:45
 
初めて、投稿します。
テキストファイルをある条件で分割するマクロを作成してますが、
マクロ終了後、分割したファイルが開いてしまいます。
分割したファイルが開かない方法がありましたら、教えてください。
また、エラー発生時にログを出力したいのですが、ファイルが上書きとなりログが追
加されません。追加モードで出力するにはどうしたらいいのでしょうか?

作成中のマクロです。
ご指導のほど、お願いします。
OSは、2000 または XP
秀丸は、v5.18を使用してます。


 #Line = -1;
 $Base = basename2;    
 $ext = filetype;
 $LogOut = directory + "\\log\\log.txt";
 $OutFileName = "";    
 $OutFile_directory = directory + "\\temp\\";  
 $OutFile = "";    
 #SFLG = 0;    
 #LineStart = 0;    
 #LineStart2 = 0;    
 #LineEnd = 0;    
 #LineCount = 0;    
 #LineCount2 = 0;      $title = "";      
 #handle = hidemaruhandle( 0 );

 question "Data 分割 を開始しますか?";
 if( result == no )
 {
  message "Data 分割 を中止しました";
  endmacro;
 }
disabledraw;
gofiletop;        

loop:
 golinetop;      
 if(linelen2 == 0) goto loopext;
 if(gettext(0,y,1,y) >= "A" && gettext(0,y,1,y) <= "Z"){  
  if(#SFLG == 0){
   #LineCount = #LineCount + 1;
   $OutFileName = gettext(0,y,8,y);  
   #SFLG = 1;
   clearcliphist;
   beginsel;
   down;      
  } else {
   #LineCount = #LineCount + 1;
   #LineStart2 = #LineCount;
   movetolineno 1, #LineStart;
   beginsel;
   movetolineno 1, #LineEnd + 1;

   copy;

   openfile "/h" + $OutFile_directory + $OutFileName + $ext;
   paste;
   saveas $OutFile_directory + $OutFileName + $ext;


   setactivehidemaru #handle;  
   movetolineno 1, #LineStart2;
   #LineCount2 = 0;
   $OutFileName = gettext(0,y,8,y);  

   clearcliphist;
   beginsel;
   down;      
  }
 } else if(gettext(0,y,1,y) >= "0" && gettext(0,y,1,y) <= "9"){
   #LineCount = #LineCount + 1;
   #LineCount2 = #LineCount2 + 1;
   if(#LineCount2 == 1) {
    #LineStart = #LineCount;
   } else {#LineEnd = #LineCount;
   }
   down;      
  }
 else if(gettext(0,y,1,y) == "-") {
  #LineCount = #LineCount + 1;
  down;      
 }
 else {
  #LineCount = #LineCount + 1;
  #LineCount2 = #LineCount2 + 1;
  #LineStart3 = #LineCount;

  openfile "/h" + $LogOut;
  golineend2;
  $title = $OutFileName + " にエラーデータがあります。行 = " + str( #LineCou
nt2 );
  insert $title;
  insertreturn;
  down 1;
  saveas $LogOut;

  setactivehidemaru #handle;
  movetolineno 1, #LineStart3;
  down;    
 }

 goto loop;
loopext:
 if(#LineCount > 0) {
  #LineCount = #LineCount + 1;
  movetolineno 1, #LineStart;
  beginsel;
  movetolineno 1, #LineEnd + 1;

  copy;

  openfile "/h" + $OutFile_directory + $OutFileName + $ext;
  paste;
  saveas $OutFile_directory + $OutFileName + $ext;
  setactivehidemaru #handle;  
 }
enabledraw;
 message "ファイル分割処理 終了。";
gofiletop;
endmacro;

[ ]
RE:05688 テキストファイルの分割についてNo.05689
ENCODINGSHIFTJIS さん 07/11/13 11:34
 
エラー発生時にログを出力したいのですが、ファイルが上書きとなりログが追加され
ません。
追加モードで出力するにはどうしたらいいのでしょうか?

エラーの有り無しにかかわり無く、最初に Logファイルを開いておき、
gofileend; するのが簡単では。

マクロ終了後、分割したファイルが開いてしまいます。
分割したファイルが開かない方法がありましたら、教えてください。

 秀丸エディタを終了させてもマクロは続行したい場合は
setactivehidemaruやclosehidemaruを使う必要があります。

OutFile をsaveas 後に Log面 にカーソルを移して、OutFileを閉じるで。どうでしょう

[ ]
RE:05688 テキストファイルの分割についてNo.05690
秀丸担当 さん 07/11/13 18:07
 

>テキストファイルをある条件で分割するマクロを作成してますが、
>マクロ終了後、分割したファイルが開いてしまいます。
>分割したファイルが開かない方法がありましたら、教えてください。

推測ですが、openfile "/h"で開いた秀丸エディタはマクロ終了後に全て表示さ
れます。
マクロ終了前にclosehidemaru等を使って終わらせるといいかもしれません。

>また、エラー発生時にログを出力したいのですが、ファイルが上書きとなりログが追
>加されません。追加モードで出力するにはどうしたらいいのでしょうか?

同じファイルを開こうとしたときの挙動は、[その他]→[動作環境]→[ファイル]
→[排他制御]→[秀丸エディタで同じファイルを開く場合]の設定によって違いま
す。
おそらく、同じファイルを開く場合、上書き禁止になっているでしょうか。
動作環境を適切なものにするか、マクロで同じファイルを開かないようにすると
いいかもしれません。

ちなみに動作環境の状態をマクロで制御するにはレジストリをいじる必要があっ
てややこしいですが、V7.00以降であればsetcompatiblemode文を使うと簡単にな
ります。

[ ]
RE:05689 テキストファイルの分割についてNo.05692
k_myyeh3782 さん 07/11/13 22:14
 
ENCODINGSHIFTJIS さんへ

さっそくの回答ありがとうございました。

ファイルのクローズについては、closehidemaruを使用しみごと解決しました。助言
をいただく前はたぶんclosehidemaruを入れる位置が悪かったので、うまくファイル
が閉じず、どうしたものかと思っていました。助言をいただき、再度closehidemaru
を見直しうまくファイルがクローズするようになりました。

ログについては、邪道だとは思いますが、writeinistrを使い、INIファイルにデータ
を書きこむようにファイルを「log.txt」としてデータを出力するようにしました。
どうにか、エラーが拾える簡単な情報が得られるようにまりました。

あともう一息で完成しそうです。
どうも、ありがとうございました。




>エラー発生時にログを出力したいのですが、ファイルが上書きとなりログが追加さ
>れません。
>追加モードで出力するにはどうしたらいいのでしょうか?
>
>エラーの有り無しにかかわり無く、最初に Logファイルを開いておき、
>gofileend; するのが簡単では。
>
>マクロ終了後、分割したファイルが開いてしまいます。
>分割したファイルが開かない方法がありましたら、教えてください。
>
> 秀丸エディタを終了させてもマクロは続行したい場合は
>setactivehidemaruやclosehidemaruを使う必要があります。
>
>OutFile をsaveas 後に Log面 にカーソルを移して、OutFileを閉じるで。どうでし
>ょう

[ ]
RE:05690 テキストファイルの分割についてNo.05693
k_myyeh3782 さん 07/11/13 22:21
 

秀丸担当さんへ


さっそくの回答ありがとうございました。

ファイルのクローズについては、closehidemaruを使用しみごと解決しました。どう
も、コード入れる位置を間違えていたみたいで、再度 closehidemaru のマクロの文
を見直し、また他のマクロを参考にしながら何とかファイルのクローズに成功しまし
た。

ログについては、邪道だとは思いますが、writeinistrを使い、INIファイルにデータ
を書きこむようにファイルを「log.txt」としてデータを出力するようにしました。
どうにか、エラーが拾える簡単な情報が得られるようになりました。ENCODINGSHIFTJ
IS さんから助言頂いた方法でも試してみたいと思います。

あともう一息で完成しそうです。
どうも、ありがとうございました。


>
>>テキストファイルをある条件で分割するマクロを作成してますが、
>>マクロ終了後、分割したファイルが開いてしまいます。
>>分割したファイルが開かない方法がありましたら、教えてください。
>
>推測ですが、openfile "/h"で開いた秀丸エディタはマクロ終了後に全て表示さ
>れます。
>マクロ終了前にclosehidemaru等を使って終わらせるといいかもしれません。
>
>>また、エラー発生時にログを出力したいのですが、ファイルが上書きとなりログが追
>>加されません。追加モードで出力するにはどうしたらいいのでしょうか?
>
>同じファイルを開こうとしたときの挙動は、[その他]→[動作環境]→[ファイル]
>→[排他制御]→[秀丸エディタで同じファイルを開く場合]の設定によって違いま
>す。
>おそらく、同じファイルを開く場合、上書き禁止になっているでしょうか。
>動作環境を適切なものにするか、マクロで同じファイルを開かないようにすると
>いいかもしれません。
>
>ちなみに動作環境の状態をマクロで制御するにはレジストリをいじる必要があっ
>てややこしいですが、V7.00以降であればsetcompatiblemode文を使うと簡単にな
>ります。

[ ]
RE:05692 テキストファイルの分割についてNo.05694
ENCODINGSHIFTJIS さん 07/11/14 12:32
 
一般的 感想ですが、発想が プログラム言語 的 です
 エディター的発想も おいおい 慣れると思います。

1.グローバルな行カウンタを自力で作っている
秀丸マクロ ヘルプ 目次−内部的な値を表現するキーワード
に各種ありますが。先頭と現在の差で ファイル毎の行もわかります。

2.入力のエラーは処理する前に 見つけたほうがよい、
タグジャンプですぐ飛べます。処理の後でレポートを出すのはダサい

メニュー,検索(S),Grepの実行
^[^A-Z0-9-]

3.エディター的な書き方では
新しいファイル名で 毎回開くのではなく、面を再利用する形があります。

beginsel;
searchdown "^[A-Z]",regular;
copy;
面切り替え、selectall; paste;
saveas $OutFile_directory + $OutFileName + $ext;

[ ]