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

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

よく使うマニュアルです

Wiki

updated on 2004.06.23

5.8.*TBLの作成とSJIS,EBCDIC変換

[ Previous ] [ HOME ] [ Upper ] [ Next ]


EBCDICからS-JISへの変換をAS/400上でしなくてはならないことありませんでしたか?

AS/400からパソコンへデータを渡すとき、VAN業者を使わねばならないとき、漢字変換はVALUE ADDとなり、結構高く付きます。それで、API QDCXLATEを利用して、データ変換をしました。漢字も変換できます。ただ、SBCSのデータでカタカナは小文字のアルファベットになってしまいどっかにテーブルがあるだろうと思いつつ、見つけられませんでしたそこで、CRTTBLでカタカナ対応のテーブルを作成しました。実は、V2のマニュアルに載っていました。(QASCII,やQEBCDICではだめです。)QDCXLATEはSYSTEM38からあるツールで、「超高速」です。初めて使ったときは、びっくりしました。

QUSRSYSに数多くの、変換テーブルが、AS/400上にあることは気づいていたのですが、これを使用してよいか不明だったのです。

しかし、

「国別言語サポート 計画の手引き」

V2R1M0 N:GC41-9877-00 の 付録G
V2R3M0 N:GC88-5095-02 の 付録 I

に、

付録 図形文字変換テーブル

「次は、AS/400のシステムの変換ライブラリーの一覧表です。テーブルオブジェクトの名前と説明、変換前と変換後の文字セットとコードページの値が示してあります。
これらはの変換テーブルは、ある文字セットとコードページから別の文字セットとコードページにデータを変換するために使われます。データ変換するには、QDCXLATEプログラムを呼んでださい

とあります。

V3R1の同様のマニュアル(cd-ROM)SC88-5238-00には、QDCXALTEに言及はするものの、このようにはっきり出ておらず、「各国で利用される適用業務の開発 (SC88-5319) を参照してください。」で終わってました。実は、このマニュアル見つからないのです。あの、変換テーブルを作成した時点では、V3は検索しましたが、V2のマニュアル、見てなかったのです。私のミスです。(ほんとは、すっごくショックです。あの苦労は何だったの?)

最初は、「V3とV2は違うのだ、やはり、使わないべきだろう」、と考えていましたが、よくよく思えば、V2でサポートしていたことをV3で取り消すはずがありません。

そこで、新しくプログラムを作ったところ、難なく動作を確認しました。(V3R1)つまり、私の薦めた、サイトのテーブルは残念ながら、不要となります。

EBCDIC S-JIS Q290337897 290 から 337 897
S-JIS EBCDIC Q897337290 897 から 337 290

が適当と思われます。

上記は、テキストなどをAS/400からPCへ渡す作業を前提と考えています。制御コードなどはすべて、16進数00となっていますので、気をつけてください。自分のテーブルのソースは、ほとんど同じですが、QUSRSYSのテーブルが16進数00に対して、自分のは、16進数 00の変換以外はスペース(16進数20または40)にしている点です。

また、1041への変換テーブルも別にありますが、記号や制御コードの変換の部分がやや特殊なので、まだ、使えるのか不明です。

注意:上記のテーブルは、SBCS半角のことです。漢字変換は問題なく、作動します。

その他の考慮点

bullet5.gif (945 バイト)オープンフィールド(漢字混在)一括可能です。但し、J -> E の場合の、SISOが増える点に注意(パラメータ設定を誤ると、QDCXLATEがエラーを出します。)

bullet5.gif (945 バイト)AS/400上で変換して、PC5250などの転送命令で「無変換」を選ぶと、CR/LFが付きません。(変換すると、付く。)よって、必要であれば、AS/400で、S-JIS用のCR/LF(X'0D',X'0A')をわざと付加してください。尚、上記のテーブルでは、EBCDICX'0D'やX'25'は、 Q290337897ではX'00'となります。

bullet5.gif (945 バイト)ファイルレコード(フィールド無視)一括変換できますが、数字ゾーンの正数と文字のみです。パック、バイナリ、負数のゾーンはだめでしょう。PC側のソフトのルールにあわせて、あらかじめ、すべて文字タイプで、AS/400でファイルを作成します。たとえば、AS/400のの物理ファイルに、CSV(Column Separated Value)形式などで、いったん作成後、一括変換してしまう。

bullet5.gif (945 バイト)ファイルレコード一括(フィールド無視)で、E -> Jに漢字変換した後、J ->Eで、再び戻した場合、漢字のシフトが狂う可能性があります。たとえば、フィールドが、英数+漢字+漢字+英数の4つだとすると、S-JISへは問題無いですが、それを、今度はそのまま、J -> Eすると、英数+0E漢字漢字0F+英数となります。これが、問題ならば、J->Eの時に、S-JIS元ファイルを予め、フィールド分解して、個別変換する必要があります。

また、あえて、自分のソースをつけますが、これは、改造自由です。テーブル用ソースメンバー名をQではじめるのは危険ですので、避けてください。

内容は、以下を除き、QUSRSYSのものと上記とおなじです。

  • ASCIIJは、Q290337897で変換後の16進数00を、16進数20に変更している点、(ただし、16進数00は変換後も16進数00です)
  • EBCIDCJは、Q897337290で変換後の16進数00を、16進数40に変更している点(ただし、16進数00は変換後も16進数00です)

が異なるだけです。ご自由にお使いください。ダウンロードにある、EDTTBLSRCで楽に修正できるはずです。作成は、CRTTBL、削除はDLTTBLです。くれぐれもQで始まる、*TBLを削除しない様気をつけてください。

また、コマンド、DCXLATEは入力ファイルと出力ファイル、変換テーブル名と、変換タイプを指定すると、出力ファイルにデータを落とします。

テーブルの内容確認は、WRKTBLでOPTION5です。内容表示のみの、独立したコマンドはないようです。(V3R1)。

ダウンロードページへ、

参考記事:3.11.TRNTBLも使ってみよう

参考

変換テーブルの作り方(マニュアルより)

ソース・メンバーを使用してテーブルを作成するためには、ソース・メンバーに8レコードを入れるよう指定しなければなりません。このメンバーのそれぞれのレコードには、64文字の16進文字が入っていなければなりません(64桁目より後の文字は使用されません)。この入力データ(512文字の16進文字の)は、CRTTBLコマンドによって256バイトとして内部で変換され、記憶されます。
QDCXLATEのパラメータは以下の通りです。
変換されているデータの長さ 入力 Packed(5,0)
変換データ 入出力 Char(*)
SBCS 変換テーブル名 入力 Char(10)
SBCS 変換テーブル・ライブラリー名 入力 Char(10)
出力データ 出力 Char(*)
出力バッファーの長さ 入力 Packed(5,0)
変換されたデータの長さ 出力 Packed(5,0)
DBCS 言語 入力 Char(10)
シフトアウトおよびシフトイン文字 入力 Char(1)
変換のタイプ 入力 Char(10)

QDCXLATEを使用した例

 
     FINPUT   IP  F     500            DISK
     FOUTPUT  O   F    1000            DISK
     E****************************************************
     E*          A R R A Y        T A B L E              *
     E****************************************************
     E                    OUT      1000  1               ;
     I******************************************************
     I*       D E F I N E   I N P U T   F I E L D          *
     I******************************************************
     IINPUT   AA  01
     I                                        1 500 IN
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     IDSOUT       DS
     I                                        11000 OUT
     C******************************************************
     C*     DEFINITION  MODULE  ( PLIST   FIELD   KLIST )  *
     C******************************************************
     C*                                                    :
     C*  DEFINE ENTRY                                      :
     C*                                                    :
     C           *ENTRY    PLIST                           :
     C                     PARM           PICVT   3        :
     C                     PARM           PITBL            :
     C                     PARM           PITBLL           :
     C******************************************************
     C*             M A I N -  R O U T I N E                
     C******************************************************
     C                     MOVE *LOVAL    DSOUT            :
     C                     MOVELPICVT     TRNTYP           :
     C*                                                    :
     C                     MOVE 'N'       SISO             :
B001 C           PICVT     IFEQ '*AE'                      :
 001 C                     MOVE 'Y'       SISO             :
E001 C                     END                             :
     C*                                                    :
     C                     CALL 'QDCXLATE'                 :
     C                     PARM 500       BUFLEN  50       :
     C                     PARM           IN               :
     C                     PARM           PITBL  10        :
     C                     PARM           PITBLL 10        :
     C                     PARM           DSOUT            :
     C                     PARM 1000      MAXOLN  50       :
     C                     PARM 1000      OUTLEN  50       :
     C                     PARM '*JPN'    SDBCS  10        :
     C                     PARM           SISO    1        :
     C                     PARM           TRNTYP 10        :
     C*                                                    :
     C                     EXCPT#OUT                       :
     C*                                                    :
     CLR                   RETRN                           :
     O******************************************************
     O*             O U T P U T   M O D U L E              *
     O******************************************************
     OOUTPUT  E                #OUT
     O                         DSOUT      

[ Previous ] [ HOME ] [ Upper ] [ Next ]

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

 

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