重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

テキストファイルを1行ずつ読み込んで別ファイルに保存しています。
ただ時々バイナリの入っているところがあります。

Line Input #1, d$
では正確に読み込めないのか
書き込んだ行とは違うことになります。

同じように書き込むためにはどうしたらいいのでしょうか?

A 回答 (2件)

こんにちは。



確かに、テキストファイルをバイナリで扱うことはありますね。どうも何のためにしているか分からないので思ったように、回答が付けられません。あくまでも、一般的な使い方を示します。

私も、テキストファイルでバイナリにすることは良くありますが、それを保存というのはまた別問題です。

例えば、Unicode(UTF-16) BOM の場合に、バイナリで扱います。

Sub BinaryInput()
  Dim Fno As Integer
  Dim Fname As String
  Dim bufbyt() As Byte
  Dim i As Long

  Fname = "UTF16LE.txt"    'ファイル名"

  Fno = FreeFile()
  If FileLen(Fname) = 0 Then Exit Sub
  Open Fname For Binary Access Read As #Fno
  bufbyt = InputB(LOF(Fno), #Fno)
  
  For i = 0 To 3
   buf = buf & Hex(bufbyt(i))
  Next i
  If buf Like "FFFE*" Then
    MsgBox "Unicode BOM付き", vbInformation
  End If

End Sub

以下は、ZIP圧縮の場合

Sub TestZip()
  Dim Fname As String
  Dim Fno As Integer
  Dim buf As String
  Dim bufbyt() As Byte
  Dim i As Long
  Fname = "EDE1D300" '←Excelの残骸ファイル
  Fno = FreeFile()
  Open Fname For Binary Access Read As #Fno
  bufbyt = InputB(LOF(Fno), #Fno)
  Close #Fno
  For i = 0 To 10 Step 1
    buf = buf & Chr(Val(bufbyt(i)))
    If buf = "PK" Then MsgBox "圧縮ファイルです。", vbInfomation: Exit For
  Next
End Sub


逆に
Open Fname For Binary Access Write As #FNo

というものもありますが、セットで使ったことはありません。
    • good
    • 0
この回答へのお礼

Open Fname1 For Binary Access Read As #FNo1
Open Fname2 For Binary Access Write As #FNo2
で開くなら1行の文字列をD$にできるのかがネックです。

Open Fname1 For Input As #FNo1
Open Fname2 For output As #FNo2
で開くならバイナリーの入った行をそのままそっくりそのままコピーすることです。
そのときの関数は
Input(1, #FNo1)
InputB(1,#FNo.1)
だと思いますが・・・。

確認ですが、1行読み込んだ場合通常は読み込めますし、度のデータを別ファイルに書き込めます。
しかし時々読み込めない行があり調べるとLine Inputでは正常に読み込めません。

お礼日時:2016/08/29 21:50

Line Input命令はテキスト入力でしょうから無理。


テキストは改行コードまでを1行としてして扱うので、バイナリコードは正しく扱えなくて当然です。

バイナリコードのデリミタを指定してバイナリモードでコピーしましょう。
※何のシステムで行っているのか不明なので、手段までは分かりません。
    • good
    • 0
この回答へのお礼

バイナリーコードで読み込んだ1行をD$にできますか?
それをまたバイナリーで書き込めますか?

読み込めたD$は場合によって別の文字列を書き込みたいのです。

お礼日時:2016/08/29 21:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!