
VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいのですが、
例えば、"A"が一文字のみのShift-JIS もしくはunicodeのテキストファイルを作るため、
(下記の確認はShift-jis で行っています。)
Dim ByteData As Byte
ByteData = AscW("A")
Open "C:\A.txt" For Binary Access Write As #1
Put #1, 1, ByteData
Close #1
としました。
できあがったファイルをバイナリエディタで確認すると、
41
となっています。
(Unicode は 41 00 2バイト文字でリトルエンディアンのため)
この41は、"A" の文字コード(Shift-JIS)「65」の16進表記です。
この「41」という値を使ってバイナリモードでテキストファイルを作成したいのですが、
どのようにすればよいでしょうか?
上記
Put #1, 1, ByteData
の部分を、
1.Put #1, 1, 41
としたところ、通常表示はできないファイルができあがったみたいです。
バイナリモードで 「29 00 20 20」でした。
文字コード00 に該当する文字がないためだと思います。
2.Put #1, 1, "41"
としたところ、「41 」(バイナリモードで 「34 31 20 20」)
(41の後ろは半角空白)
で×でした。
3.Put #1, 1, CLng("&H" & 41)
としたところ、通常表示はできないファイルができあがったみたいです。
バイナリモードで 「41 00 00 00」でした。
4.ByteData = CLng("&H" & 41)
Put #1, 1, ByteData
これでやっとできました。
この他にも方法があるのか?と思い、質問させていただきました。
ご指導よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
1バイトしか出力していないから。
ReDim ByteData(1) As Byte
ByteData(0) = AscW("A")
Open "C:\A.txt" For Binary Access Write As #1
Put #1, , ByteData
このように要素数2の配列を出力すれば良い。
と言うか、コード変換はStreamオブジェクトを使うべきです。
Dim S, U
Set S = CreateObject("ADODB.Stream")
S.Open
S.Type = 2 '★テキストモード
S.Charset = "Shift_JIS" '★SHIFT-JIS
S.WriteText "A" '★文字列を書き込む
Set U = CreateObject("ADODB.Stream")
U.Open
U.Type = 2
U.Charset = "UniCode"
S.Position = 0 '★ファイル位置を先頭に戻しておく
S.CopyTo U '★コード変換する
U.SaveToFile "C:\OK\U.txt", 2 '★ファイルに保存
S.Close
U.Close
出力ファイルの先頭には文字コードを示すBOM(2バイト)が付加されます。
これがイヤなら、次のようにBOMを避けて、自分のデータに読み込み、
これを出力します。
S.CopyTo U '★コード変換する(ここまで同じ)
U.Position = 0 '★先頭に戻す
U.Type = 1 '★バイナリモード
ReDim B(U.Size - 1) As Byte '★全データ長を定義
U.Position = 2 '★BOMを避けて3バイト目へ位置付ける
B = U.Read '★全データをバイト配列へ読み込む
Open "C:\A.txt" For Binary Access Write As #1
Put #1, , B '★ファイルへの書き込み
Close #1
UniCodeの他、UTF-8など、登録されている文字コードなら相互に
変換することができます。
No.1
- 回答日時:
' ByteData は Byte型 (1 Byte)
Dim ByteData As Byte
' Unicode 文字セットの "A" を Byte型(1 Byte)にセット
' A は ASCIIコードで &h41 (10進で 65)
ByteData = AscW("A")
' ファイルをバイナリファイルの書込みモードでオープン
Open "C:\A.txt" For Binary Access Write As #1
'ファイルの1バイト目に Byte型(1 Byte)の値をセット
'バイナリエディタで見ると 41 と見える
'(バイナリエディタが 16進表記の為)
'当然 "J" だった場合、4A と見える
Put #1, 1, ByteData
'ファイルの1バイト目に Integer型(2 Byte)で 10進数の
'41 をセット、 41の16進は、&h29 で、integer型の為
'バイナリエディタで見ると [29 00]が入る
'[29 00 20 20]になったとなるのなら、先にA.txtを削除して
'確認すること(前の情報が残っていると思われる)
'当然ながら、先の"J"の場合の、4A はエラーになる
Put #1, 1, 41
'ファイルの1バイト目に char型で 2文字 "41"をセット
'文字の 4 は ASCIIコードで &h34 (10進 で 52)
'文字の 1 は ASCIIコードで &h31 (10進 で 49)
'バイナリエディタで見ると [34 31]が入る
'[34 31 20 20]になったとなるのなら、先にA.txtを削除して
'確認すること(前の情報が残っていると思われる)
Put #1, 1, "41"
'ファイルの1バイト目に long型(4 Byte)で (CLng で long型に変換した為)
'で、&h41 をセット、long型の為 [41 00 00 00] が入る
'当然ながら、CLng("&H" & 4A) とするとエラー CLng("&H4A")ならOK
Put #1, 1, CLng("&H" & 41)
'Byte型(1 Byte) の変数に、long型( 4 Byte )の値をセット
'その後、1Byte を書き込む
'当然ながら、CLng("&H" & 4A) とするとエラー CLng("&H4A")ならOK
ByteData = CLng("&H" & 41)
Put #1, 1, ByteData
'ファイルクローズ
Close #1
最後のやり方のように、Byte型に格納して書き込むやり方で良いと思いますが
Chr$ で 1文字に変換してセットで良いかも知れません
Put #1, 1, Chr$(CInt("&H" & 41))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
-
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
VBAのバイナリ出力について
Visual Basic(VBA)
-
-
4
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
5
ACCESS VBA でのバイナリデータ操作について
その他(コンピューター・テクノロジー)
-
6
文字列をバイナリデータとして読み込む方法
Visual Basic(VBA)
-
7
16進数の変換処理
Visual Basic(VBA)
-
8
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
9
バイナリデータの中からMidのように指定範囲を取得したい
Visual Basic(VBA)
-
10
Excelでバイナリデータを処理するには?
Excel(エクセル)
-
11
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
12
byte型をstring型として扱うには
Visual Basic(VBA)
-
13
バイト型のデータを16進表記でファイルに書き込むには?
Visual Basic(VBA)
-
14
数値のパック10進数の変換について(vb6)
Visual Basic(VBA)
-
15
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
16
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
17
Excel VBAで自分のアドレスを取得したい
その他(Microsoft Office)
-
18
ExcelVBA バイナリファイルの全半角の判断
Excel(エクセル)
-
19
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
20
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pngからepsへの変換
-
ATTファイルってどうやって開け...
-
フォーム無しでアプリを作成す...
-
ExcelのVBAコードについて教え...
-
テキストファイルの一部分を抽...
-
RGBデータからBMP画像へ
-
C言語でテキストファイルをバイ...
-
ファイル変換
-
VBSでテキストファイルの2行目...
-
Excel VBAが徐々に遅くなる
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
【Excel VBA】取り込んだファイ...
-
ファイルのダウンロードが遅い
-
[Java]LinuxのOS判定方法
-
VBScriptから指定URLを次々に開...
-
Excel で「OLE は現在使用でき...
-
EXCELで複数のファイルを同じブ...
-
Eclipseで検索ができなくなった
-
vb2005でXmlReaderの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル固定長データ...
-
既存のテキストファイルを開く方法
-
VB(VBA)で、バイナリデータを使...
-
テキストファイル内容の、16進...
-
VBSでテキストファイルの2行目...
-
ストリームについて。
-
エクセルVBAでメールの自動作成...
-
受信メールを一括してテキスト...
-
WORDのVBAで差し込み印刷時、デ...
-
別のサーバーのテキストファイ...
-
テキストファイルの特定行の削...
-
excelからtextへ変換する際の出...
-
Zbarというソフトについて
-
テキストファイル内の文字の有...
-
Excel VBAが徐々に遅くなる
-
HTMLでこんなこと可能ですか??
-
テキストファイルを検索・編集...
-
ASP.NET Web上のテキストファ...
おすすめ情報