• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バイナリデータの中からMidのように指定範囲を取得したい)

バイナリデータから指定範囲を取得する方法

このQ&Aのポイント
  • VB6でテキストファイルをバイナリモードで開き、特定の位置から必要な分を取得し、ファイルを分割させる方法について教えてください。
  • コード内にはOpen、ReDim、Get、Put、Closeなどの関数が使用されていますが、指定されたバイト数目から指定されたバイト数までのデータを取得する方法がうまくできていないようです。
  • 望む結果を得るためにはどのような修正が必要でしょうか。お助けください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

文字化けするとのことですが そのファイルはUnicodeテキストファイルでしょうか? Unicodeですと ファイルの先頭に &HFF &HFEという2バイトのサインが必要です また 全てが2バイトで表現されていますので切り出す位置が偶数バイト目になるようにしないといけないかと思います ReDim byData( LOF(1) )といった具合にして 0ベースにしたほうが計算が楽ですよ 1 to にすると最後の1バイトは読み込みませんよ ユニコードなら for文を ReDim ar( バイト数 + 2 ) ar(0) = 255 ar(1) = 254 for n=2 to バイト数   ar(n) = byData( ( n - 2 ) + オフセット ) next といった具合にして見ましょう

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

普通に考えれば ベタにfor文でループしてコピーでしょう dim n as integer, ar() as byte ReDim ar(必要な要素数) Open 読込ファイル For Binary As #1 ReDim bytData(1 To LOF(1)) Get #1, , bytData() Close #1 for n=0 to 必要な要素数 ar(n) = byData(n + 必要な要素へのオフセット) next Open 書込ファイル For Binary As #2 Put #2,,ar() Close #2 といった具合です

satoshi777
質問者

補足

redfox63さん、いつもありがとうございます。 早速やってみましたが、必要箇所だけでなく、やはり全てを取得してしまいます。おまけにノートパッドで開くと化けています。元データは、 ぱっと見、普通のテキストデータです。 Dim 開始位置 as long Dim 終了位置 as long Dim 文字数 as long 文字数 = 終了位置 - 開始位置 Dim n As Integer, ar() As Byte Dim bytData() As Byte ReDim ar(Val(文字数)) Open 読込ファイル For Binary As #1 ReDim bytData(1 To LOF(1)) Get #1, , bytData() Close #1 For n = 0 To 文字数 ar(n) = bytData(n + 開始位置) Next Open 書込ファイル For Binary As #2 Put #2, , ar() Close #2 という風にお手本をいじったのですが、間違いがあるでしょうか? 何度もすいません。