他のファイル形式への変換

ライブラリー・システムのデータ・ベースを
CSV,XML,Excel等の形式に変換

ライブラリー・システムのデータ・ベースを CSV, XML, Excel 等の他の形式の
データ・ベースに変換する手法をここで紹介します。
いずれの場合でも EnterpriseServer で提供されている CPYTOxxx 形式の
コマンドによって簡単に変換してIFS に保存することができます。
IFS にさえ保存することができれば、IFS のパス名をリダイレクトしてブラウザに
戻してやればブラウザで表示することができます。
またブラウザで表示するのであれば、一定時間の経過後には IFS のファイルを
自動的に消去することもできます。

■ 初期画面

サンプル画面

CSV へのコピー : CPYTOCSV

CSV はカンマ区切りのデータ・ベース表記として最もポピュラーなデータ・ベースの表現のひとつです。

サンプル ソース・コード

               PGM                                                                
  /*---------------------------------------------------------*/                   
  /*   TESTCSV  :   CSV への変換サンプル                     */                   
  /*---------------------------------------------------------*/                   
               DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                          
               DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                           
               MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))                 
                                                                                  
               RTVJOBA    TYPE(&TYPE)                                             
                                                                                  
  /*( CPYTOCSV  による CSV 変換 )*/                                               
               ASNET.COM/CPYTOCSV FROMFILE(QTRFIL/SHOHIN) +                       
                            TOSTMF('/AS400-NET.USR/TEST/SHOHIN.TXT') +            
                            MBROPT(*REPLACE) ELEM(*COLHDG1)                       
                                                                                  
  /*( 変換後の保管場所にリダイレクト )*/                                          
               ASNET.COM/SNDURL URL('/AS400-NET.USR/TEST/SHOHIN.TXT') +           
                            CONT_TYPE(CSV)                                        
               RETURN                                                             
                                                                                  
   ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)                       
   SNDMSG:                                                                        
               IF         COND(&TYPE *EQ '0') THEN(DO)                            
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                
               ENDDO                                                              
               ELSE       CMD(DO)                                                 
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)                
               ENDDO                                                              
               ENDPGM                                                             
					

【例】ライブラリー QTRFIL の商品マスターファイル SHOHINCSV として保存する。

CPYTOCSV FROMFILE(QTRFIL/SHOHIN) TOSTMF('/TEST/SHOHIN.CSV') MBROPT(*ADD) ELEN(*FLDNAM)

【解説】 CSV 見出し(ELEN) キーワードでは次の指定を行うことができます。

*FLDNAMフィールド名が CSV の見出し行に使用されます。
*COLHDG1欄見出し1 が CSV の見出し行に使用されます。
*COLHDG2欄見出し2 が CSV の見出し行に使用されます。
*COLHDG3欄見出し3 が CSV の見出し行に使用されます。
*ALLCOLすべての欄見出し が CSV の見出し行に使用されます。
*TEXTテキストが CSV の見出し行に使用されます。

XML へのコピー : CPYTOXML

今の時代にあっては XML によるデータ交換はますます普及に傾向にあります。
しかし XML への変換を自作しようとしても、XML にはいくつかの禁則文字と呼ばれるエンコードが必要な
文字 ( &, <, >, ' ) があります。
CPYTOXML コマンドは CPYTOCSV のように データ・ベースを XML 化して IFS に保存すると同時に適切な
エンコードも行います。

サンプル ソース・コード

               PGM                                                                
  /*---------------------------------------------------------*/                   
  /*   TESTXML  :   XML への変換サンプル                     */                   
  /*---------------------------------------------------------*/                   
               DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                          
               DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                           
               MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))                 
                                                                                  
               RTVJOBA    TYPE(&TYPE)                                             
                                                                                  
  /*( CPYTOXML  による XML 変換 )*/                                               
               ASNET.COM/CPYTOXML FROMFILE(QTRFIL/SHOHIN) +                       
                            TOSTMF('/AS400-NET.USR/TEST/SHOHIN.XML') +            
                            MBROPT(*REPLACE) ELEM(*COLHDG1)                       
                                                                                  
  /*( 変換後の保管場所にリダイレクト )*/                                          
               ASNET.COM/SNDURL URL('/AS400-NET.USR/TEST/SHOHIN.XML') +           
                            CONT_TYPE(CSV)                                        
               RETURN                                                             
                                                                                  
   ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)                       
   SNDMSG:                                                                        
               IF         COND(&TYPE *EQ '0') THEN(DO)                            
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                
               ENDDO                                                              
               ELSE       CMD(DO)                                                 
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)                
               ENDDO                                                              
               ENDPGM                                                             
					

XML パーサー

System i から XML をブラウザや別のサーバーに送信するには CPYTOXML コマンドだけで十分ですが、
System i が XML を受け取って解析するのであれば「XMLパーサー」と呼ばれる XML の解析ツールが必要となります。
「XMLパーサー」も EnterpriseServer で提供されています。

Excel ブックへのコピー : CPYTOEXCL

CPYTOEXCL を 使えばデータ・ベースを Excelブック として IFS に保存することができます。
データ・ベースを Excel に保存する、という他のソフトウェア製品の多くはデータ・ベースをSYLK 形式の
ファイルに置き換えて出力する、というものですがSYLK ファイルは Excel の前世代の
MULTPLAN (マルチプラン) で使用されていた形式であり今では、Microsoft やIBM 5250エミュレータでも
廃止の方向にあります。
さらに SYLKBIFF への出力であれば Excel にきめ細かなセットを行うことはできません。
Excel としてデータを公開するのであれば、注意を促したいセルの背景色を変更すれば良いでしょうが、
SYLKBIFF ではこのような制御を行うことはできません。

サンプル ソース・コード

               PGM                                                                
  /*---------------------------------------------------------*/                   
  /*   TESTEXCL :   EXCL への変換サンプル                    */                   
  /*---------------------------------------------------------*/                   
               DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                          
               DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                           
               MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))                 
                                                                                  
               RTVJOBA    TYPE(&TYPE)                                             
                                                                                  
  /*( CPYTOEXCL  による XML 変換 )*/                                              
               ASNET.COM/CPYTOEXCL FROMFILE(QTRFIL/SHOHIN) +                      
                            TOSTMF('/AS400-NET.USR/TEST/SHOHIN.XLS') +            
                            MBROPT(*REPLACE) ELEM(*COLHDG1)                       
                                                                                  
  /*( 変換後の保管場所にリダイレクト )*/                                          
               ASNET.COM/SNDURL URL('/AS400-NET.USR/TEST/SHOHIN.XLS') +           
                            CONT_TYPE(CSV)                                        
               RETURN                                                             
                                                                                  
   ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)                       
   SNDMSG:                                                                        
               IF         COND(&TYPE *EQ '0') THEN(DO)                            
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                
               ENDDO                                                              
               ELSE       CMD(DO)                                                 
               SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)                
               ENDDO                                                              
               ENDPGM                                                             
					

POI から移植された CPYTOEXCL

Apache Jakarka-ProjectPOI は Java によって書かれた Excel, Word 等の MS製品のオブジェクトを直接、
扱うことができるオープン・ソースAPI です。しかし POI は Java 言語によって書かれているために実行速度は遅く
System i のプラットフォームでは実用的であるとは言えません。
そこで潟Iフィスクアトロでは POI の一部を C/400へ書き換えてサービス・プログラム POI を開発致しました。
( POI は弊社製品 Chicago に同梱され、そのため CPYTOEXCL の実行には Chicago が必要となります。)

潟Iフィスクアトロが開発した POI を利用すると RPGCOBOLExcel のセル値の読み書きや文字や背景色の
セット等を柔軟に行うことができます。
ここでは POI の最も簡単な使用方法としての CPYTOEXCL をサンプルとして示しています。