テキストファイルのNULLデータについて

解決


あこ  2004-09-23 21:44:46  No: 116454

お世話になっております。
VB6.0の環境で作業を行っております。

テキストファイルのデータをstring型の変数に入れて
固定のバイト数分を切り分け作業をしているのですが・・
テキストデータにNULLが入っていると
データがその分少なくなって?()

そのまま切り分けをすると
ずれが生じてしまうのですが・・

なにかいい方法ありましたら教えて下さい。
よろしくお願いいたします。


あこ  2004-09-23 21:51:12  No: 116455

()内にその理由を書こうとして途中で送信してしまいました。。
lenfileで取得したファイルサイズとStrConv(s_str, vbFromUnicode)(※変数に入れたバイト数)
を比較したら・・null分変数のバイト数が減っていたためです。


Say  2004-09-24 02:36:32  No: 116456

NULLではなく、vbNullChar('\0')のことだと思いますが・・・
Asciiz文字列は'\0'をターミネータとしてますから、
多くの文字列処理関数では、データ中に'\0'を発見すると
そこを文字列終端とみなし、以降のデータを無視するよう作られています。

それを避けるには、'\0'をターミネータと見なさない
文字列処理関数を(自作などで)用意するか、
不都合がなければ処理前に'\0'を半角空白などに置換してください。


あこ  2004-09-24 08:55:02  No: 116457

お返事ありがとうございました。
ご指摘のとおり  vbNullChar('\0')のことです。
でも、テキストデータを取得するときには
もうvbNullChar('\0')が抜けてしまうみたいなのですが・・
データ取得時にどうすれば  vbNullChar('\0')をそのまま取得することが
できるのでしょうか??

ご教授宜しくお願い致します。。


Say  2004-09-24 17:24:53  No: 116458

ファイル内に'\0'を含んでいるという時点で
テキストファイルではないのですが・・・。

For Binary で OpenしてByte配列に入れるとか。


あこ  2004-09-25 19:25:29  No: 116459

Sayさま  ありがとうございました。

・・ファイル内に'\0'を含んでいるという時点で
テキストファイルではないですね(>_<)。。本当に初心者ですみません。トホホ。

教えていただいたとおり  For Binary で 
OpenしてByte配列に入れるやり方で解決できました!

いつも  みなさまのご指導に大変感謝しておりますm(_ _)m
今日も仕事を頑張れます!


てる  2004-10-18 20:09:59  No: 116460

あこさん、「For Binary で 
OpenしてByte配列に入れるやり方で解決」について
よろしければもう少し詳細を教えてもらえませんか?
同じ問題に直面していて、解決しないのです。
宜しくお願いします。


あこ  2004-10-19 01:50:12  No: 116461

てるさんへ

説明が難しいので・・ロジックを書いておきましたので
使用できるかわかりませんが。。参考にして下さい。

    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


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加