PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
23666 | 10/03/24 16:11:22 | RE(4):PB7.0: Unicodeで出力したLDIFファイルのASCII変換 By GREENS |
23656 | 10/02/16 20:40:56 | RE(3):PB7.0: Unicodeで出力したLDIFファイルのASCII変換 By Pos |
23655 | 10/02/05 09:04:03 | RE(2):PB7.0: Unicodeで出力したLDIFファイルのASCII変換 By GREENS |
23652 | 10/02/04 14:09:45 | RE(1):PB7.0: Unicodeで出力したLDIFファイルのASCII変換 By Pos |
23650 | 10/01/29 10:44:24 | PB7.0: Unicodeで出力したLDIFファイルのASCII変換 By GREENS |
カテゴリ:スクリプトの記述
日付:2010年03月24日 16:11 発信者:GREENS
題名:RE(4):PB7.0: Unicodeで出力したLDIFファイルのASCII変換
Posさん、こんにちは。
教えて頂いた方法だと
対象のデータが60000Byte以上なので、Stringにデータが入りきらず駄目でした。
そこで以下のようにしてみたのですが、ループでBlobMidするたびに
読み込み位置が大きく(20?40Byte程度)ずれてしまいます。
何がいけないか検討もつかずまた手詰まりになってしまいました・・・。
*****************************************************************
FOR ll_i = 1 to ll_loops
ll_bytes_read = FileRead(li_FileNum, lbb_b)
lbb_total = lbb_total + lbb_b
NEXT
//ファイルオープン(出力ファイル)
li_FileNum2 = FileOpen(ls_出力ファイル, StreamMode!, Write!)
ll_blob_現在位置 = 0
//ファイル出力ループ
DO WHILE ll_blob_lengthwk <> 1
//Blobデータを切り出し(String最大文字数である60,000 Byteを超えない範囲で)
lbb_b_wk = BlobMid(lbb_total, (ll_blob_現在位置 + 1), 60000)
//ユニコードからの変換(最後の文字がおかしな状態でもok)
ls_出力ファイル = FromUnicode(lbb_b_wk)
//文字を切り出し(最後の文字がおかしな状態なのを考慮し、1文字少ない状態で)
ll_blob_lengthwk = LenW(ls_出力ファイル)
IF ll_blob_lengthwk = 1 THEN
ls_出力ファイル = MidW(ls_出力ファイル, 1, (ll_blob_lengthwk + 0))
ELSE
ls_出力ファイル = MidW(ls_出力ファイル, 1, (ll_blob_lengthwk - 1))
END IF
//ファイル出力
FileWrite(li_FileNum2, ls_出力ファイル)
//今回対象のByte数を確認
lbb_b_wk2 = Blob(ls_出力ファイル)
ll_blob_length2 = Len(lbb_b_wk2)
//次ループ用に、現在読取済みの位置を設定(文字認識しない部分を正常に確認する)
ll_i = -10
DO WHILE ls_出力ファイル <> ls_出力ファイルwk
ll_i = ll_i + 1
lbb_b_wk = BlobMid(lbb_total, (ll_blob_現在位置 + 1), 60000 + ll_i)
ls_出力ファイルwk = FromUnicode(lbb_b_wk)
LOOP
ll_blob_現在位置 = ll_blob_現在位置 + 60000 + ll_i
LOOP
FileClose(li_FileNum2)
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows XP
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.