Introduction

ブログ内検索

  • このサイトの記事を検索 by Google

おすすめの一冊!

無料ブログはココログ

« SeaHorse でイベントハンドラ | トップページ | uncensored favotter »

2009-09-03

ファイルの末尾がわからない

Sleipnir の SeaHorse スクリプト (SleipnirScript) で
ちょっと困った問題があって悩んでます。



SleipnirScript では、組み込みスクリプト用の機能を使って
ローカルファイルの読み書きができます。
ただ、用意されている API はほんとにシンプルで、

    OpenFile() ・・・ファイルオブジェクトを取得
    Write()    ・・・文字列を書き込む
    ReadLine() ・・・1行読み込む
    Close()    ・・・ファイルを閉じる

の4種類しかなかったりします。

詳しくは、Sleipnir をインストールするとインストール先の
documents フォルダに作られる Sleipnir-Script.txt に
書いてあります(詳しくも何もないのですが・・・)。



で、問題は、読み込み時にファイルの末尾に到達したかどうかを
どうやって判断すればよいかわからない、ということです。

たとえば、以下のコードでファイルを読み込もうとします。

var fileObj = sleipnir.OpenFile(fileName, 'r'); if (! fileObj) return; while (line = fileObj.ReadLine()) { result.push(line); } fileObj.Close();
一見するとうまく動きそうなのですが、読み込むファイルの中に 空行があるとそれ以降の行を読み込んでくれません。 なぜなら、空行があると ReadLine() は「空文字列」を返しますが、 JavaScript では空文字列は「false」と解釈されるので、 while 文から抜けてしまうからです。 そこで、上記のコードを
while (null != (line = fileObj.ReadLine())) {
のように変えてみると、あっさり Sleipnir が暴走します・・・ つまり、ファイル末尾に到達しても ReadLine() は「null」や 「未定義値」ではなく「空文字列」を返すみたいなのです。 というわけで、空行を読み込んだのかファイル末尾に到達したのか、 スクリプトから区別する方法がありません。 困りました・・・

« SeaHorse でイベントハンドラ | トップページ | uncensored favotter »