|
▼yaya さん:
こんばんは。
>LIne Inputでよみますと以下の結果が得られ
>これがセルに書きこまれました
> 8ュLス・・ソR&ソ・セソ}Zハソqナソ
>
>上記の結果を下記のような数値に変換して読みたいのですが
> 223.56 332.12 120.25
なるほど・・・、
結果から先に申し上げると、
・投稿していただいた情報では数値として認識させる事はできません。
・又、情報を提供して頂いたとしても場合によっては、変換が
すこぶる困難な場合もあります。
また、例を挙げましょう!!
以下のコードを実行してバイナリファイルのサンプルを作成してみて下さい。
標準モジュールに
'======================================================
Type rec
dat(1 To 3) As Double
End Type
'================================================================
Sub put_file()
'倍精度の変数を3つ書き込みました
'ファイルは、8*3=24 バイトのファイルです
'それぞれには、yaya さんが提示された数値を代入しました
Dim rec1 As rec
flno = FreeFile()
Kill "D:\My Documents\binfile.bin"
Open "D:\My Documents\binfile.bin" For Random As #flno Len = 24
' ↑パス名は、適当に変えて下さい
With rec1
.dat(1) = 223.5
.dat(2) = 332.12
.dat(3) = 120.25
End With
Put #flno, 1, rec1
Close #flno
End Sub
作成したバイナリファイルをLine Inputを使用して読み込んで見ましょう
同じ標準モジュールに
'=======================================================
Sub get_line_input()
Dim dat As String
flno = FreeFile()
Open "D:\My Documents\binfile.bin" For Input As #flno
Line Input #flno, dat
Close #flno
[a1].Value = dat
End Sub
アクティブシートのセルA1には、なにやら変てこな表示がされていると思います。
では、正しく表示させるようにしてみましょう。
同じ標準モジュールに
'===========================================================
Sub get_file()
Dim rec1 As rec
flno = FreeFile()
Open "D:\My Documents\binfile.bin" For Random As #flno Len = 24
Get #flno, 1, rec1
Close #flno
With rec1
For idx = 1 To 3
MsgBox .dat(idx)
Next
End With
End Sub
以上を順番に実行してみて下さい。
get_fileというプロシジャーで数値を取得できていますよね?
何故なら、私は、binfile.binというバイナリファイルのレコード形式を
知っているからです(倍精度データ(8バイト)が3つ連なっているデータであるということをです、)。ここで私が作ったのですから当たり前なのですが・・・。
これを知らなければ、データを取得する事はできません。
お分かりいただけたでしょうか?
バイナリファイルの中のデータを意味のあるデータとして取得するためには、
ファイルの中の仕様を知っていなければならないのです。
これは、yaya さんが問題にしているバイナリファイルの設計者あるいは、
そのファイルを作成したアプリの作成者に聞かなければなりません。
又、例題では、Doubleという変数を取り上げましたが、
Doubleと言う変数は浮動小数点になっていますが、
この浮動小数点の仕様がVBAの仕様と違う場合だってあります。
この場合は、VBAのDoubleで取得しても値が違ってきてしまいます。
と言う事でまず、
バイナリファイルの仕様を調べることから始めてはいかがでしょうか?
|
|