2015年10月27日火曜日

Javascriptでテキストファイルを読み込む

近年、Javascriptがブームになりつつあります。FileAPIなどの拡張機能なども充実してきました。
そこで、IE独自のActiveXコントロールを使って色々なことをしてみましょう。

今回は(次回があるといいですね)テキストファイルの読み込みをしてみようと思います。

ファイル操作関連のことは、次のインスタンスを多くの場合使用することになります。

var hogehoge = new ActiveXObject("Scripting.FileSystemObject");

WSHの場合は、以下のようになります。

Set hogehoge = WScript.CreateObject("Scripting.FileSystemObject");

これで、ScriptingFileSystemObjectクラスのインスタンスを取得できました。ファイル操作は主にこいつを使って行います。

とりあえずファイルをテキストファイル(これ超重要)として開きます。
ファイルは開かないと何も始まりません。

テキストファイルを開くには、基本的にOpenTextFile()関数を使用します。(他にもありますが使い勝手が悪い)

var fs = new ActiveXObject("Scripting.FileSystemObject");
var file = fs.OpenTextFile("開くテキストファイルのパス");

このときOpenTextFile関数が返した値(ここではfile変数)で開いたファイルに対して様々な操作を行なえるようになります。

また、開いたファイルは用が済んだら閉じましょう。

file.Close();

/* ここからは任意 */
//解放
fs = null;
file = null;

テキストファイルを1行読み込む(1行読み込み)


1行だけ読み込むにはReadLine()関数を使用します。
/*
  あらかじめテキストファイルを開いておく
  var fs = new ActiveXObject("Scripting.FileSystemObject");
  var file = fs.OpenTextFile("開くテキストファイルのパス");
*/

/* 1行目のみ読み込む */
text[0] = file.ReadLine();

/* 2行目を読み込む */
text[1] = file.ReadLine();
ReadLine関数は、呼び出すたびに1行ずつ読み込みますので大変便利です。

テキストファイルを文字数を指定して読み込む


文字数を指定して読み込むには、Read()関数を使用します。
/*
  あらかじめテキストファイルを開いておく
  var fs = new ActiveXObject("Scripting.FileSystemObject");
  var file = fs.OpenTextFile("開くテキストファイルのパス");
*/

/* ファイルの先頭から6文字読み込む */
text = file.Read(6);

テキストファイルをすべて読み込む


テキストファイルをまとめて読み込むには、ReadAll()関数を使用します。
/*
  あらかじめテキストファイルを開いておく
  var fs = new ActiveXObject("Scripting.FileSystemObject");
  var file = fs.OpenTextFile("開くテキストファイルのパス");
*/

/* テキストファイルをすべて読み込む */
text = file.ReadAll();
ReadAll()関数は便利ですが、メモリを多く消費します。ですので極力使わず、ReadLine()関数をうまく使うようにしましょう。
var text = "";
/* ファイルが最後まで読み込まれるまでループ */
while (!file.AtEndOfStream){
  text += file.ReadLine();
}
AtEndOfStreamプロパティにはテキストファイルが終端に達しているかを示す真偽値が入っています。終端ならtrue、そうでなければfalseです。
他にも似たようなプロパティAtEndOfLineがありますが、これは空行に到達すると終端に達していないにも関わらずtrueになってしまいます。よってここでAtEndOfLineを使うと、空行混じりのファイルが読み込めなくなります。AtEndOfStreamを使うようにしましょう。

いかがだったでしょうか。意外と簡単だったと思います。Scripting.FileSystemObjectではファイルへの書き込みや追記も可能です。次回(あれば)はテキストファイルへの書き込みのお話をしたいと思います。

注意
今回使用したScripting.FileSystemObjectは、ActiveXコントロールを必要とします。ActiveXコントロールはHTAなどのセキュリティレベルの低い状態のIEまたはデジタル署名ずみのコンテンツをIEで動作させるときのみ使用できます。一般的なWebページを作成する際は、FileAPIなどを使うようにしてください。
また、私が作ったサンプルに著作権なんてあるわけがありません。ご自由に転載・引用・二次配布などしていただいて構いません。ただし、それらのサンプルでエラーが起こったり、データが消えたり、マシンが火を吹いたとしても私(chiko ryo)は一切の責任を負いませんのでご注意ください。

0 件のコメント:

コメントを投稿

質問や意見などどしどしお寄せください!!