
No.9ベストアンサー
- 回答日時:
ウィス! 今日は午後出社ダヨ
昨日は用事があって、きちんと最後まで説明できなかったダヨ。
Open strFile For Binary As #intFile
Get #intFile, , bytBuff
Close #intFile
までは一緒
先頭から1~10バイトがShiftJIS
文字変数 = strconv(MIDB(bytBuff,1,10),vbunicode)
先頭から11~14バイトがバイナリ
redim バイト変数(3) as byte
バイト変数 = MIDB(bytBuff,11,4)
これで先頭の一行の改行コード直前までの値を取得したことになる。
ついでにいうと先頭から15~16バイトが改行コード
strconv(MIDB(bytBuff,15,2),vbunicode) = 改行コード(vbcrlf)
だから17バイト目からXレコードが始まることになる。
Xレコードを取るためには
MIDB(bytBuff,17,文字変数より取得したXレコード長)
とすると取れるはず。
バイナリと言ってもいろいろあるので、どんなデータが入っているのかわからないから、キャストしやすいバイト変数をサンプルに挙げたけど、必要に応じて違う変数を宣言する必要あり。
いろいろご指導ありがとうございました。
思考錯誤の結果、
Open ~ For Binary
Get
Close
Open ~ For Input
Line Input
Close
を使い分けした方法で実現しました。
大変助かりました。
No.6
- 回答日時:
・1レコード毎の可変長
・バイナリデータ、全角文字、半角カナを含む
これだけじゃわからない。
「存在するかどうか」はもうわかっているので、
どういう法則で入っているかが必要。
バイナリデータの形式(レコードセットXMLなどなど)
バイナリレコードは複数行数にわたって存在していて、各バイナリ情報の使用するバイト数が統一されていなければ、それらのバイナリ領域が何バイト存在しているかが、各レコードにヘッダが必要になる。(リソースファイルや圧縮ファイルのアルゴリズム)
バイナリを読むためには、予め読む領域が得ていることが必須
この回答への補足
確かにおっしゃる通りで説明不足でした。
そこで
以下の例でレコードが存在していた場合についての
”限定”ではどうでしょうか。
1レコード目: 英数字(10バイト)+バイナリ(4バイト)
Xレコード目: 英数字(?バイト)
Yレコード目: 英数字(?バイト)
Zレコード目: 全角文字(?バイト)
1は、バイナリ領域の存在位置/長さがわかる固定長
XYZは、英数字、全角文字が混在する可変長
No.5
- 回答日時:
そもそも、そのデータは固定長?
そうじゃなきゃ、バイナリで読むなんて、かえって面倒。
全部取得しちゃえば、何でも対応できる。
そもそもShift-JISと違って、バイナリに改行という概念は無い。
改行も単なる文字コード
だからLine Input を使用する事自体に矛盾がある。
Dim intFile As Integer
Dim lngLen As Long
Dim bytBuff() As Byte
Dim strFile As String
Dim varWk As Variant
Dim i As Long
strFile = "C:\Test.txt"
lngLen = FileLen(strFile)
ReDim bytBuff(lngLen - 1)
intFile = FreeFile
Open strFile For Binary As #intFile
Get #intFile, , bytBuff
Close #intFile
varWk = Split(StrConv(bytBuff, vbUnicode), vbCrLf)
For i = LBound(varWk) To UBound(varWk)
Debug.Print varWk(i)
Next i
この回答への補足
TXT内の構成は、
・1レコード毎の可変長
・バイナリデータ、全角文字、半角カナを含む
レコードもあり
で、1レコード単位に処理したいのです。
このような場合、どうすればよろしいのでしょうか。
No.4
- 回答日時:
#2のゆんです。
・・・何故、純粋に1行読みたい時にBinaryなんでしょう。。。(^-^;
1行を読み込んだ後に、Binaryでの処理があるから、とかであれば
まずは、Open ファイル名 For Input Access Read As fpFileNo などで
開き、1行読み込んで処理してから、
再度Binaryで開くとかしたほうがいいように思います。
この回答への補足
#2のゆんさん。ありがとうございます。
読込むTXTファイル内には、バイナリデータが混在して
いるため、このようなOpen方法にしています。
再Open時に発生するファイルptr操作を複雑にしたくなく、
なるべくOpenは、1回で済ませたかったのです。
やはり、扱うデータに合わせで再Openしなくては
実現できないのでしょうか。

No.3
- 回答日時:
下記のようにテストしたところ正しく取り出せました。
参考になるか解りませんが・・・
Dim sFileName As String
Dim fpFileNo As Integer
Dim strMsgBuffA As String
Text1.Text = ""
fpFileNo = FreeFile
sFileName = CurDir & "\Test001.txt"
Open sFileName For Input As #fpFileNo
Do While Not EOF(fpFileNo)
Line Input #fpFileNo, strMsgBuffA
Text1.Text = Text1.Text & strMsgBuffA & vbCrLf
Loop
Close #fpFileNo
この回答への補足
すみません。
参考にさせていただきましたが
Open sFileName For Binary As #fpFileNo
では、やはりうまくいきませんでした。
For Binary でオープンした場合
Line Input では、だめなのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) ExcelデータのMacとWindowsの文字化け対策について教えてください‼︎ 私はMacを使って 1 2022/08/22 12:46
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- Java Java 南京錠 2 2023/02/04 11:46
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードが存在しなかった場合
-
カレントレコードが無い事を判...
-
差し込み印刷のレコード数について
-
サブフォームに新規レコードを...
-
DataGridViewの内容をDBに反映...
-
ワードの差込印刷で教えて下さ...
-
ADO VBA 実行時エラー3021
-
Access フォーム 選択されてい...
-
Access を×ボタンで閉じ...
-
エラー番号=5 制約を有効にで...
-
サブレンジ分割されたNDB(富士...
-
レコードを流したときに出るよ...
-
DataGridViewの、選択されてい...
-
ACCESS2000 SQL 最大レコード数
-
Delphi データベースコンポー...
-
ファイル書込みで一行もしくは...
-
Accessデータシートビューの行...
-
VB6.0でのエクセル行削除
-
アクセスでレポートの1印刷内...
-
バッチファイル問題。 FOR文でC...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードが存在しなかった場合
-
DataGridViewの、選択されてい...
-
ADO VBA 実行時エラー3021
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
ファイル書込みで一行もしくは...
-
カレントレコードが無い事を判...
-
ワードの差込印刷で教えて下さ...
-
アクセスでレポートの1印刷内...
-
DataGridViewの内容をDBに反映...
-
[VBA] ADOの Clone と AddNew
-
固有レコード識別子の選択とは
-
JSPのNULLレコード表示について...
-
Access を×ボタンで閉じ...
-
サブフォームに新規レコードを...
-
データセットのレコード更新が...
-
サブレンジ分割されたNDB(富士...
-
レコードセット(ADO.Recordset)...
-
DataGridViewにてセル以外をク...
-
COBOLでのランダムアクセス
おすすめ情報