PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
16985 02/02/12 11:02:30 RE(2):PB6: 16進数をchar型にしたものの扱い By kuni9167
16982 02/02/10 23:20:34 RE(1):PB6: 16進数をchar型にしたものの扱い By めめ
16978 02/02/08 23:04:31 PB6: 16進数をchar型にしたものの扱い By kuni9167

カテゴリ:スクリプトの記述
日付:2002年02月10日 23:20 発信者:めめ
題名:RE(1):PB6: 16進数をchar型にしたものの扱い

kuni9167さん、こんばんは。


>テキストデータを取込む処理を作成しているのですが、テキスト内に16進数char型データが含まれています。
>この部分はレコードの長さ情報を持っている部分です。
>しかし、現在のスクリプトではどうも最終的に得られるデータにズレが
>できてしまいます。Fileseekでポインタを強制移動している部分に無理が
>あるのでしょうか?

おそらく、途中のNull(Hex 00)が欠落してしまうのではないでしょうか。
これは、Fileseek というより FileRead 関数で先頭の1バイト目が0x00の場合
読み飛ばしてしまうことがあるような。。。
# こちらで、少し見てみたところその様な現象が。。

それで、取得されるデータを String 型ではなく Blob 型にしてみました。
以下、参考にでもなりましたら。


//変数設定
long filenum, data_len, file_len, sts, i
string filename
blob data, data_sum, chr, data_cnv

//ファイル長さ取得
file_len = filelength(filename)

//ファイルオープン
filenum = fileopen(filename,StreamMode!)

//ファイル読み出し
Do Until fileread(filenum,data) < 0

//データ長さ取得
data_len = len(data)
data_cnv = Blob(\"\")

//16進数char型00が含まれていた場合spaceを代入
For i = 1 to data_len
chr = Blobmid(data, i, 1)
If String(chr) = \"\" Then
data_cnv += Blob(\" \")
Else
data_cnv += chr
End If
Next

data_sum = data_sum + data_cnv

Loop

fileclose(filenum)


P.S. それから…半角カナの使用は控えましょう。
   半角カナは全角に置き換えさせて頂きました。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows95
DBMS Oracle SQL*Net 2.1
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS Oracle 7.3
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.