anti scroll

ブラウザと小説の新しい関係を模索する

全テキスト読み込み

今まで、ファイルの文字列を読み込むのに一行ずつ(read_line)読んでいって、EOFの例外捕まえたらブレークみたいな処理を書いていて、多分間違ってるんだろうなあとか思いつつ放置していたのですが、やっぱり不味かったみたいで、調べたらちゃんとそれらしいのがありました。

in_channel_length でサイズとって、String.create でバッファ作って、really_input でコピーするってのが正しい作法っぽいですね。Buffer.create した上に、read_line の結果をadd_string とかバッファに追加するループまわしてたのは、何から何まで間違いだったのですね。

let read_text_file filepath =
  let ch = open_in filepath in
  let size = <font color="#FF0000">in_channel_length</font> ch in
    try
      let buff = String.create size in
      let () = <font color="#FF0000">really_input</font> ch buff 0 size in
      let () = close_in ch in
        buff
    with
        e ->
          let () = close_in ch in
            raise e

それと、たま〜に突如として小説の本文が全然表示されなくなったりとかしていたのは、この部分の処理で書くのも恥ずかしいバグを色々と仕込んでいたのが原因でした。まあ見つかってよかったです。

教訓
pervasives.mli はきちんと読もう。