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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.