[ 新規に投稿する ]

ファイルのread/write関数についてNo.09033
ohtorii さん 19/07/16 19:26 [ コメントを投稿する ]
  お疲れさまです。

私が現在作成しているマクロにて以下関数があると実行速度的に大変助かります。
ご検討をお願いできないでしょうかm(__)m


//ファイルの一部を文字列変数へ読み込む関数
string readfile(ファイル名,文字コード,読み込み開始行位置,読み込み行数);

//文字列変数をファイルへ書き込む関数
bool   writefile(ファイル名,文字コード,文字列変数名);


# 現状
・ファイル先頭の10行だけ必要としているときに、ファイル全体(100Mとか)を読み込むため動作が緩慢です。
・文字列をファイルへ書き込むために、非表示の秀丸エディタを新規作成して saveas しているため、これも動作が緩慢です。

よろしくお願いいたします。
[ ]
RE:09033 ファイルのread/write関数についてNo.09034
秀丸担当 さん 19/07/17 11:05 [ コメントを投稿する ]
 
ファイルを読み書きする方法として、秀丸エディタの機能ではないですがFileSystemObjectを使う方法があります。

//読込みの例
#objFso=createobject("Scripting.FileSystemObject");
#objFile=member(#objFso,"OpenTextFile","c:\\folder\\bigfile.txt");
$strLine=member(#objFile,"ReadLine");
member #objFile,"Close";
message $strLine;
endmacro;

//書き込みの例
$savetext="保存テキスト";
#objFso=createobject("Scripting.FileSystemObject");
#objFile=member(#objFso,"OpenTextFile","c:\\folder\\test.txt",2,1);
member #objFile,"WriteLine",$savetext;
member #objFile,"Close";
endmacro;


秀丸エディタの機能としてやるとしたら、ファイルの一部を読み込んだり、saveasで選択だけを保存する方法があります。
UTF-8とかだとこちらのほうがいいかもしれないです。

//ファイルの一部を読み込みを使う例
#h=hidemaruhandle(0);
openfile "/h /l0,10000,0 c:\\folder\\bigfile.txt";
#hOpen=hidemaruhandle(0);
gofiletop;
selectline;
$strLine=gettext(seltopx,seltopy,selendx,selendy);
setactivehidemaru #h;
closehidemaru #hOpen;
message $strLine;
endmacro;


//文字列をファイルに保存する例
disabledraw;
$savetext="保存テキスト";
#x=x;
#y=y;
insert $savetext;
beginsel;
moveto #x,#y;
saveas "c:\\folder\\test.txt",utf8,bom,selection;
undo;
endmacro;

秀丸エディタのマクロとしては基本的に本文にあることを前提としていて、エンコーディングの指定/自動判定/設定が本文と同等の動きをすることになります。FileSystemObjectのように読み書きだけをする専用の関数で、本文と同等レベルの関数となると、作るのがちょっとややこしいことになります。
本文と同等でなくて、シンプルな読み書きの関数を作るとしたら比較的やりやすいと思いますが、それだとFileSystemObjectと大差ないことになると思います。

[ ]
RE:09034 ファイルのread/write関数についてNo.09035
ohtorii さん 19/07/17 19:18 [ コメントを投稿する ]
  お疲れさまです。

ご返答ありがとうございます。

FileSystemObjectを使う方法があるんですね試してみます。
あと、openfileはhidemaru.exeの起動オプションがそのまま指定できるんですね、ヘルプを見落としていました。

よろしくお願いいたします。
[ ]
RE:09035 ファイルのread/write関数についてNo.09037
秀丸担当 さん 19/07/23 09:08 [ コメントを投稿する ]
 
本題と少しずれますが、起動オプションの/lを使ってファイルの一部を開く方法はありますが、新しいウィンドウを出さずに新規作成状態の秀丸エディタに読み込む方法はありませんでした。
openfilepartのような文を作るという話は以前あったのですが、やっていなかったので、できるようにしようと思います。

あと、FileSystemObjectを使う方法もありますが、writeinistrのように一文で手軽に書き込めたらいいかもしれないので、それはそういうネタということにしておこうと思います。
[ ]

[ 新規に投稿する ]