お世話になっております。
VB6.0の環境で作業を行っております。
テキストファイルのデータをstring型の変数に入れて
固定のバイト数分を切り分け作業をしているのですが・・
テキストデータにNULLが入っていると
データがその分少なくなって?()
そのまま切り分けをすると
ずれが生じてしまうのですが・・
なにかいい方法ありましたら教えて下さい。
よろしくお願いいたします。
()内にその理由を書こうとして途中で送信してしまいました。。
lenfileで取得したファイルサイズとStrConv(s_str, vbFromUnicode)(※変数に入れたバイト数)
を比較したら・・null分変数のバイト数が減っていたためです。
NULLではなく、vbNullChar('\0')のことだと思いますが・・・
Asciiz文字列は'\0'をターミネータとしてますから、
多くの文字列処理関数では、データ中に'\0'を発見すると
そこを文字列終端とみなし、以降のデータを無視するよう作られています。
それを避けるには、'\0'をターミネータと見なさない
文字列処理関数を(自作などで)用意するか、
不都合がなければ処理前に'\0'を半角空白などに置換してください。
お返事ありがとうございました。
ご指摘のとおり vbNullChar('\0')のことです。
でも、テキストデータを取得するときには
もうvbNullChar('\0')が抜けてしまうみたいなのですが・・
データ取得時にどうすれば vbNullChar('\0')をそのまま取得することが
できるのでしょうか??
ご教授宜しくお願い致します。。
ファイル内に'\0'を含んでいるという時点で
テキストファイルではないのですが・・・。
For Binary で OpenしてByte配列に入れるとか。
Sayさま ありがとうございました。
・・ファイル内に'\0'を含んでいるという時点で
テキストファイルではないですね(>_<)。。本当に初心者ですみません。トホホ。
教えていただいたとおり For Binary で
OpenしてByte配列に入れるやり方で解決できました!
いつも みなさまのご指導に大変感謝しておりますm(_ _)m
今日も仕事を頑張れます!
あこさん、「For Binary で
OpenしてByte配列に入れるやり方で解決」について
よろしければもう少し詳細を教えてもらえませんか?
同じ問題に直面していて、解決しないのです。
宜しくお願いします。
てるさんへ
説明が難しいので・・ロジックを書いておきましたので
使用できるかわかりませんが。。参考にして下さい。
Dim BufData() As Byte '文字列格納用バッファ(バイト配列)
Dim BufData_1() As Byte '文字列格納用バッファ(1項目分)
Dim l_FileSize As Long 'ファイルサイズ
Dim s_FileFree As String 'ファイル番号取得用
Dim i_field_cnt As Long '文字位置取得
Dim b_rtn As Boolean 'レコード追加時のリターン値
Dim s_データ() As String '取得データの文字列格納用
Dim AppPath As String '入力データのアドレス取得
'処理対象の入力データを設定(ここには入力ファイルを設定して下さい。)
AppPath = "c:\xxxx(バイナリファイル名)"
'使用可能なファイル番号取得
s_FileFree = FreeFile
Open AppPath For Binary As s_FileFree
l_FileSize = LOF(s_FileFree)
'ファイルサイズが0KBの時
If l_FileSize = 0 Then Exit Function
ReDim Preserve BufData(l_FileSize - 1) As Byte 'メモリー再確保
BufData() = InputB(l_FileSize, s_FileFree)
Close s_FileFree
ツイート | ![]() |