Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


59501 / 76738 ←次へ | 前へ→

【21924】Re:バイナリファイルをTXTファイルで書込みをしたい
発言  ichinose  - 05/2/3(木) 21:05 -

引用なし
パスワード
   ▼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で取得しても値が違ってきてしまいます。


と言う事でまず、
バイナリファイルの仕様を調べることから始めてはいかがでしょうか?

0 hits

【21873】バイナリファイルをTXTファイルで書込みをしたい yaya 05/2/2(水) 15:52 質問
【21880】Re:バイナリファイルをTXTファイルで書込みをし... Jaka 05/2/2(水) 16:33 回答
【21885】Re:バイナリファイルをTXTファイルで書込みをし... yaya 05/2/2(水) 17:08 お礼
【21893】Re:バイナリファイルをTXTファイルで書込みをし... ichinose 05/2/2(水) 21:23 発言
【21903】Re:バイナリファイルをTXTファイルで書込みをし... yaya 05/2/3(木) 10:05 お礼
【21924】Re:バイナリファイルをTXTファイルで書込みをし... ichinose 05/2/3(木) 21:05 発言
【21936】Re:バイナリファイルをTXTファイルで書込みをし... yaya 05/2/4(金) 11:10 お礼

59501 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free