最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

3.17.UNICODEデータのセットアップ

[ Previous ] [ HOME ] [ Upper ]


以下の方法によりUNICODEデータをセットできます。

1. RPGの作成

ファイルは、3.17.UNICODEデータのセットアップGフィールド+CCSID(13488)を含むファイルです。
画面は、o(オープンフィールド)にします。

この場合、転送は、特に意識しなくても、EBCDIC<-->UNICODEの変換は、DBMSが勝手にしてくれます

PF

A*------------------------------------*
A          R UCS2RR
A*------------------------------------*
A            A1FLG0        10G         COLHDG('FLAG A')
A                                      CCSID(13488)
A            A1FLG1        10G         COLHDG('FLAG O')
A                                      CCSID(13488)
A            A1FLG2        10G         COLHDG('FLAG G')
A                                      CCSID(13488)

DSPF

A*-------------------------------------*
A          R FMT01
A*-------------------------------------*
A            V1FLG0        30O  B  6 20
A            V1FLG1        30O  B  8 20
A            V1FLG2        30O  B 10 20

RPG例

1             CHAIN     UCS2PF

              MOVEL(p)  A1FLG0        V1FLG0
              MOVEL(p)  A1FLG1        V1FLG1
              MOVEL(p)  A1FLG2        V1FLG2

              EXFMT     FMT01

              MOVEL(p)  V1FLG0        A1FLG0
              MOVEL(p)  V1FLG1        A1FLG1
              MOVEL(p)  V1FLG2        A1FLG2

              IF        %FOUND
              UPDATE    UCS2RR
              ELSE
              WRITE     UCS2RR
              ENDIF
              ENDDO

2.CPYFによる方法

この方が、DDSを作るだけで、可能になるため、手軽です。

UNICODE-FILE

A*------------------------------------*
A          R UCS2RR
A*------------------------------------*
A            A1FLG0        10G         COLHDG('FLAG A')
A                                      CCSID(13488)
A            A1FLG1        10G         COLHDG('FLAG O')
A                                      CCSID(13488)
A            A1FLG2        10G         COLHDG('FLAG G')
A                                      CCSID(13488)

EBCDIC−FILE

A*------------------------------------*
A          R UCS2RR
A*------------------------------------*
A            A1FLG0        20O         COLHDG('FLAG A')
A            A1FLG1        20O         COLHDG('FLAG O')
A            A1FLG2        20O         COLHDG('FLAG G')

をつくる。

  1. CPYF UNICODE-FILE EBCDIC-FILE MBROPT(*REPLACE) FMTOPT(*MAP)
  2. EBCDIC-FILEをDFUなどでデータを修正
  3. CPYF EBCDIC-FILE UNICODE-FILE MBROPT(*REPLACE) FMTOPT(*MAP)

CPYFのFMTOPT(*MAP)で、ユニコードとEBCDICの変換をしてくれます。

3. STRSQLを使った更新

対話型SQLのUPDATE命令を使います。


桁の長さの注意点

  1. G(10)は、10グラフィック文字なので、バッファでは20バイト占有します。
  2. CCSID(13488)は、1ワード2バイト(SBCSでもDBCSでも)です。※そもそもSBCSもDBCSも同じコードページに入れようとしているわけですからね。

したがって

1234567890というSBCSは、G(20)消費するし、1234567890も同じくG(20)消費します

1)EBCDIC ⇒ UNICODEの例

バイト 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
文字 1 0e 0f 3 0e 0f 5 0e 0f 7 0e 0f

という20バイトのオープンフィールドのデータは、

バイト 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
文字 1 3 5 7

となり、G(16) 長となります。

2)UNICODE ⇒ EBCDIC の例

バイト 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
文字 1 2 3 4 5

という G(20) のデータ(数字は半角)は、

バイト 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
文字 1 0e 0f 2 0e 0f 3 0e 0f 4 0e 0f 5 0e 0f

という25バイトのオープンフィールドのデータとなります。

つまり、データが全角と半角を交互に含んでいると、0E0Fで増減があり、EBCDICのコードにした場合、G(1)= 2バイトの計算式は、必ずしも言えないことになります。これは、

UNICODE -> EBCDIC ...UNICODE < EBCDIC で、受取先に桁あふれがあり得、
EBCDIC -> UNICODE ...UNICODE > EBCDIC では、受取先に桁あふれはありえない

ということになります。PCのEBCDICへの、アップロードと同じことです。

参考ページ

14.30.オープンフィールドのアップロード最大データ長

但しこの参考ページでは、半角を1バイトとして計算しています。Unicodeは従来の半角も、2バイトを必要とします。老婆心までに。

2003-8-12@


[ Previous ] [ HOME ] [ Upper ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送