テキストファイルの読み込みにおけるファイルモードはどちらが正しいのでしょうか?

解決


ミネ  2008-05-24 17:40:14  No: 100743  IP: 192.*.*.*

テキストファイルを読み込む下の関数のOpen文のところで、
ファイルモードが「For Binary Access Read」のときと「For Input」のときとで、
約40倍も読み込みスピードが違いました。
InputBで読み込むのだから「For Binary」でオープンしないといけないと思っていたので、
ずっと前者の方を使っていたのですが、後者の方を遣うべきなのでしょうか?
読み込まれた内容は同じようなのですが、ひっとしてたまたま同じだっただけで、場合によっては違う内容になってしまうというよことはあるのでしょうか?
また、なぜこんなに速さが違うのでしょうか?バイナリの方が速そうな気がするのにその逆だというのが不思議です。
よろしくお願いします。


Public Function ReadTextFile(MyFileName As String) As String

    Dim MyFileNo As Integer
    
    MyFileSize = FileLen(MyFileName)
    
    MyFileNo = FreeFile
    
'    Open MyFileName For Binary Access Read As #MyFileNo '← この方法だと40倍くらい遅い。
    Open MyFileName For Input As #MyFileNo '← この方法だと速い。
        ReadTextFile = InputB(MyFileSize, #MyFileNo)
    Close #MyFileNo
    
    ReadTextFile = StrConv(ReadTextFile, vbUnicode)

End Function

編集 削除
 2008-05-26 11:42:19  No: 100744  IP: 192.*.*.*

ちと調べてみたけど、Binaryモードだと1バイトずつデータを取得する、って説明してるページがあった
http://homepage2.nifty.com/kasayan/vba/binary.htm
(そもそもBinaryを扱うならByte型の配列を使って読み書きする事が殆どな気もするが…)
推測だけど、そのせいで遅くなってる気がする
あと、ヘルプ見たらBinaryモードでPutする時は書き込み位置を指定できるっぽいんで
その辺の絡みもあるのかも

一応、ヘルプにInputまたはBinaryでOpenしてInput(INputB)で取得云々と書いてる部分もあるから
別に使ってはまずい、という事は無いと思う
InputBを使ってるのは、本当ならInputでやりたかったけど文字数なんか分からないから
仕方なくInputBを使ったって感じかと

編集 削除
ミネ  2008-05-27 21:49:58  No: 100745  IP: 192.*.*.*

> Binaryモードだと1バイトずつデータを取得する
なるほど、それで遅かったんですね。

これで安心して For Input で開くことができます。
いろいろ勉強になりました。
ありがとうございました。

編集 削除
ミネ  2008-05-27 21:51:29  No: 100746  IP: 192.*.*.*

失礼しました。
「解決」のチェックを忘れてました。

編集 削除