こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バイナリデータのファイル入出力について

○No.1
Open filename For Binary Access Read As #1
Get #1, , 変数
Close #1

○No.2
Open filename For Input As #1
Line Input #1, 変数
Close #1

No.1とNo.2のプログラムでは読み込み方にどのような違いがあるのでしょうか?たとえば、No.2のLine Inputでは改行文字は読み飛ばされますが、No.1は改行文字も読み込みますよね。また、No.1ではDim 変数 As String * 1と最後の* 1など文字の読み込み数を定義しておく必要がありますが、Line Inputに対応するものがないからでしょうか?

また、バイナリデータを読み書きするときに他に良いコードというかこうするのが定石みたいなのがあったら教えてください。

投稿日時 - 2006-12-10 22:28:40

QNo.2592970

すぐに回答ほしいです

質問者が選んだベストアンサー

えー 逆に質問です。
「どこが同じ、なんです?」
「ファイルが読める」と言う以外に共通点なんか無いと思いますけど・・・


Binaryモード:入出力共用、テキスト・バイナリ両方
Inputモード:入力のみ、テキストのみ

Getステートメント:指定された変数の型・サイズで決まるフォーマットを1つのデータとして読み込む
Line Inputステートメント:改行文字までを1データとみなし、文字列データとして読み込む


> たとえば、No.2のLine Inputでは改行文字は読み飛ばされますが、
「そういう機能しかない」からですね。

> No.1は改行文字も読み込みますよね。
「改行文字」だからと言って、特別扱いしませんから。

> また、No.1ではDim 変数 As String * 1と最後の* 1など文字の読み込み数を定義しておく必要がありますが、

データ型・サイズを指定しないと、「どれだけ読み込めばよいか」が決まりませんから。

> Line Inputに対応するものがないからでしょうか?
「改行文字」を探して、自分でサイズを決めますから。

投稿日時 - 2006-12-11 09:55:43

お礼

簡潔でわかりやすい回答ありがとうございます。No.1が最終的には強力な機能なのですね。No.1はバイナリモードで読むということですが、変数がString型ならばASCII文字かUnicode文字に自動的に変換されてしまっているのでしょうか?

投稿日時 - 2006-12-12 20:25:11

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> No.1が最終的には強力な機能なのですね
「強力」というより「多機能」ですね。
その代わり「厳密な指定が必要(指定を間違うと予想外の動作になる)」ですが・・・

> No.1はバイナリモードで読むということですが
バイナリモードだからと言って、テキストを扱えないわけではありません。

元のファイルがテキストで、それを文字列で読み込むなら、そのまま読み込めます。

但し、
> 変数がString型ならばASCII文字かUnicode文字に自動的に変換されてしまっているのでしょうか
VBの内部処理コードはUNICODEですから、文字列で読み込めば、自動的にUNICODEになります。
#これは、Inputモードでも、Binaryモードでも同じです。

投稿日時 - 2006-12-13 12:52:07

お礼

回答ありがとうございます。
ということは
Dim 変数 As String * 1
よりも
Dim 変数 As Byte
と宣言した方が文字化けの問題等もなくなりより応用が利くといった感じでしょうか。

投稿日時 - 2006-12-17 15:07:41

あなたにオススメの質問