ファイルのread/write関数についてNo.09033
ohtorii さん 19/07/16 19:26
 
お疲れさまです。

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


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

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


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

よろしくお願いいたします。

[ ]
RE:09033 ファイルのread/write関数についNo.09034
秀丸担当 さん 19/07/17 11:05
 

ファイルを読み書きする方法として、秀丸エディタの機能ではないですがFileSystem
Objectを使う方法があります。

//読込みの例
#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;

秀丸エディタのマクロとしては基本的に本文にあることを前提としていて、エンコー
ディングの指定/自動判定/設定が本文と同等の動きをすることになります。FileSyst
emObjectのように読み書きだけをする専用の関数で、本文と同等レベルの関数となる
と、作るのがちょっとややこしいことになります。
本文と同等でなくて、シンプルな読み書きの関数を作るとしたら比較的やりやすいと
思いますが、それだと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のように一文で手軽
に書き込めたらいいかもしれないので、それはそういうネタということにしておこう
と思います。

[ ]