テキストファイルを動的配列にバイナリで読み込ませるには

解決


Tomi  2007-01-23 09:12:21  No: 97723

テキストファイルをバイナリモードで読み込みたいのですが、
下のコードでは読み込んでくれませんでした。

    Dim a() As Byte

    ファイル= "C:\test.txt"

    F = FreeFile
    Open ファイル For Binary Access Read As #F
        Get #F, , a
    Close #F

一行目を
    Dim a(10) As Byte
というふうに固定長の配列に変えたらファイルの先頭の方の文字だけは読み込んでくれます。
動的配列ではだめなのでしょうか?
しかし、例えば、インターネットトランスファコントロールでは、
 b() = Inet1.OpenURL(strURL, icByteArray)
のようにして、動的配列に読み込むことができます。
テキストファイルも動的配列に読み込ませることができると思ったのですが、
できないのでしょうか?

テキストファイルを動的配列にバイナリで読み込ませるにはどうしたらいいでしょうか?
宜しくお願い致します。


魔界の仮面弁士  2007-01-23 10:48:32  No: 97724

> 下のコードでは読み込んでくれませんでした。
Get 前に、ReDim で、配列のサイズを指定しておかないと。

>  b() = Inet1.OpenURL(strURL, icByteArray)
一括読み込みを期待するなら、ADODB.Stream を使った方が楽かも。


Tomi  2007-01-24 05:14:22  No: 97725

> Get 前に、ReDim で、配列のサイズを指定しておかないと。
下のような感じで何とかできました。
ただ、なぜかファイルの最後に余分な空白が1つ付いてしまいました。

Dim a() as Byte
ファイル = "C:\test.txt"    
MySize = FileLen(ファイル)    
ReDim a(MySize) 
F = FreeFile
Open ファイル For Binary Access Read As #F
    Get #F, , a
Close #F 

> 一括読み込みを期待するなら、ADODB.Stream を使った方が楽かも。
「ADODB.Stream」というものを全く知らなかったので、
「ADODB.Stream」で検索してみたら、ウイルスの話がたくさん出てきました。
安全なのでしょうか。できれば使いたくないのですが。

ありがとうございました。


魔界の仮面弁士  2007-01-24 07:14:08  No: 97726

> MySize = FileLen(ファイル)    
> ReDim a(MySize)
これだと、3バイトのファイルの場合に、
  a(0)
  a(1)
  a(2)
  a(3)
という、4バイト分の領域が確保されてしまいますよね。

> 「ADODB.Stream」というものを全く知らなかったので、
ADODB.Streamは、ファイルの読み書き以外にも、文字コード変換のためにも
よく使われており、それ自体は ADO ver2.5 以上に含まれているものです。

> ウイルスの話がたくさん出てきました。
Download.Ject の話でしょうか?
だとしたら、Stream その物に不具合があったというわけではないですし、
そもそも今回は、IE 上からの利用を想定しているわけでは無いので、
特に問題は無いと思いますよ。

> できれば使いたくないのですが。
使うのも自由、使わないのも自由です。


Tomi  2007-01-24 10:29:13  No: 97727

> これだと、3バイトのファイルの場合に、
>   a(0)
>   a(1)
>   a(2)
>   a(3)
> という、4バイト分の領域が確保されてしまいますよね。

なるほど、そういうことだったのですか。
ReDim a(MySize-1)
とすればよかったのですね。

> 特に問題は無いと思いますよ。
そうなんですか、安心しました。
少し調べてみましたが便利そうですね。

> 使うのも自由、使わないのも自由です。
そうですね。自分に合ったものを使うのが一番いいですね。

いろいろと教えて下さってありがとうございました。


魔界の仮面弁士  2007-01-24 18:02:55  No: 97728

> ReDim a(MySize-1)
> とすればよかったのですね。
ですます。ただし、MySize = 0 だった場合は、上記がエラーとなるので、
その点には注意してください。


Tomi  2007-01-25 06:31:39  No: 97729

> ただし、MySize = 0 だった場合は、上記がエラーとなるので、
> その点には注意してください。
そこまで考えていませんでした。さっそく修正させて頂きました。
わざわざありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加