※Fileオブジェクトの作成については「ファイルパスからFileオブジェクトを作成する」および「ファイル選択ダイアログでFileオブジェクトを取得する」を参照してください。

 

ファイルの内容を読み込むにはFileオブジェクトのread関数を使います。

var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r'); //読み込み専用で開く
    if (res) {
        var txt= fObj.read();
        fObj.close();
        $.writeln (txt);
    }
} 

まず、読み込みたいファイルのFileオブジェクトを作成し、open関数でファイルを開きます。このときopen関数の引数には読み込み専用を表す文字列「r」を渡します。

正しくファイルが開かれればtrueが返るので、それを確認後、read関数でファイルを読み込みます。なお、ファイルはデフォルトでテキストとして読み込まれ、文字エンコーディングは自動的に判別されます。

読み込みが終わったら、Close関数でファイルを閉じます。

 

<部分的な読み込み>

先の例ではファイルを1度に全て読み込みますが、以下のように部分的に読み込む方法もあります。

 

read関数の引数に数値を渡せば、任意の文字数を読み込むことができます。

var txt= fObj.read(3);

 

一文字づつ読み込むには、それ専用にreadch関数というものがあります。

var txt= fObj.readch();

 

1行分を読み込むにはreadln関数を使います。この場合、行末の改行は読み込まれません。 

var txt= fObj.readln();

 

なお、ファイルを部分的に読み込んだ場合、その分だけ読み込み開始位置が後ろにずれていきます。この読み込み開始位置(ファイルポインタ)を調べるにはtell関数を使います。この値はファイルを開いている間は継続して機能します。

なお、tell関数の返り値は「バイト数」です。和文(Shift JIS)の場合は1文字が2バイトなので、例えば「あいueo」という文字列を先頭から3文字読み込んだ場合は「5」と返ります。

//テキストファイルの先頭が「あいueo」として
var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r');
    if (res) {
        var txt= fObj.read(3); //3文字読み込む
        $.writeln (txt); //結果:'あいu'
        $.writeln (fObj.tell()); //結果:5(バイト)
        fObj.close();
    }
}

 

ファイル読み込み開始位置を任意の場所に移動するにはseek関数を使います。第1引数に移動量、第2引数に基準位置を指定します(後述)。

//テキストファイルが「あいueoかきkukeko」として
var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r');
    if (res) {
        fObj.seek(2,0); //ファイルの先頭から2バイト移動
        var txt= fObj.read(3); //3文字読み込む
        $.writeln (txt); //結果:'いue'
        fObj.seek(3,1); //現在の位置から3バイト移動
        txt= fObj.read(3); //3文字読み込む
        $.writeln (txt); //結果:'きku'
        fObj.seek(6,2); //ファイルの末尾から6バイト移動
        txt= fObj.read(3); //3文字読み込む
        $.writeln (txt); //結果:'kuk' 
        fObj.close();
    }
}

基準位置に指定する値は以下の通り。

  • 0: ファイルの先頭
  • 1: 現在の位置
  • 2: ファイルの末尾

 

ファイルを読み込んでいき、ファイルの最後まで読み込んだかどうか(eof=end of file)を調べるにはeof関数を使います。ファイルの末尾に達したときはtrueを返します。

var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r');
    if (res) {
        while(! fObj.eof)
        {
            $.writeln (fObj.readch());
        }
        fObj.close();
    }
}

 

< バイナリデータとして読み込む >

ファイルをテキストではなくバイナリデータとして読み込むには、事前にFileオブジェクトのencodingプロパティを'binary'に設定します。以下の例で、同じデータの読み込まれかたがどのように違うかが確認できます(2バイト文字が入ったデータだと結果がわかりやすい)。

var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r');
    if (res) {
        var txt= fObj.read();
        fObj.close();
        $.writeln (txt);
    }
}
var fObj= File.openDialog('ファイルを選択');
if (fObj != null) {
    var res= fObj.open('r');
    if (res) {
        fObj.encoding= 'binary';
        var bin= fObj.read();
        fObj.close();
        $.writeln (bin);
    }
}

 

あらかじめファイルのバイト数が知りたい場合は、Fileオブジェクトのlengthプロパティを取得します。

var bt= fObj.length;

なお、ファイルをバイナリで読み込む場合、read関数の引数はバイト数を表すことになります。

 

 

Joomla templates by a4joomla