データベース

19. データ・ベースをCSV形式に変換して共有フォルダーにコピーするには?

XML が普及しつつある今日でも CSV は、多くのWindowsアプリケーションに共通して使える
ので、BtoB の配布データとして根強いものがある。
ここでは データ・ベースの CSV 変換の手法について解説する。DB2/400 から IFS への
コピーには CPYTOIMPF コマンドを使うことが良く知られているが正しく動作しないと悩んで
いる人も少なくないのではないだろうか ?
正しく動作する CPYTOIMPF の使用方法も含めて紹介しよう。

1. ユーザーをシステム配布ディレクトリーに登録

現在、サイン・オンしているユーザー・プロフィールは、実行前に
システム配布ディレクトリーに登録されているかをWRKDIRE コマンドによって確認しておく必要がある。

もし、登録が無ければ「1=追加」によってディレクトリーに追加しておくこと。

2. QDLS 配下に独自の配布用のディレクトリーを作成する

CRTDIR コマンドによって下記のように配布用のディレクトリーを作成する。

3. CPYTOIMPF コマンドを使って配布用ディレクトリーへコピーする

CPYTOIMPF FROMFILE(ライブラリー/ファイル)
          TOSTMF(ストリーム・ファイル)
          RCDDLM(*CRLF)
          STRDLM(*NONE) DTAFMT(*DLM) FLDDLM(',')

の形式によって ストリーム・ファイル : QDLS/フォルダー/ファイル.txt 形式への
ファイルへコピーする。

CPYTOIMPF FROMFILE(QTRFIL/SHOHIN) TOSTMF('/QDLS/QTR/SHOHIN.TXT') 
        MBROPT(*REPLACE) RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM(*NONE) FLDDLM(',')

4. COPY コマンドを使って EBCDIC から ASCII へ変換する

掲示板等で CPYTOIMPF がうまく動作しないとの質問が、時々あるがCPYTOIMPF
ASCII 変換の指定パラメータが用意されているか、実はこれが正しく動作していない。
( 累積PTF で解決との情報もあるが OS400 V5R4M0 でも動作しない場合がある。)
そこで日本語環境で正しく CSV を生成するために、さらにこの段階でCOPY コマンドを
使って ASCII に変換するのである。

COPY OBJ('/QDLS/QTR/SHOHIN.TXT') TOOBJ('/QDLS/QTR/SHOHIN.CSV') 
        TOCCSID(*PCASCII) DTAFMT(*TEXT)

5. 生成された CSV

生成されたCSV は下記のように見事に綺麗な CSV に変換されている。
半角カナも正しく変換されていることに注目して欲しい。

NV-BS30S  ,目次ビデオTEST        ,165000   ,0002
NV-BS50S  ,ビデオ画王            ,99999    ,0002
NV-CF1    ,Cカセット編集ビデオ  ,85000    ,0002
NV-CF2    ,商品ドライバー           ,168000   ,0003
NV-CF81   ,更新テスト            ,48000    ,0001
NV-CF9    ,漢字テスト            ,19000    ,0002
NV-F850   ,音声録画ビデオ        ,140000   ,0002
NV-HK1    ,歌えるビデオ          ,90000    ,0002
NV-H1T-S  ,みんなのビデオ        ,69800    ,0002
NV-SX10   ,ビデオ画王            ,115000   ,0002
NV-W1     ,世界放送方式ビデオ    ,350000   ,0002
RX-DT75   ,CDラジオカセット    ,53800    ,0003
SC-CH150  ,超ミニ・コンポ        ,70000    ,0003
SC-CH505  ,パーソナル・ミニコンポ,100000   ,0003
SC-CH655  ,ロングプレイ・コンポ  ,129000   ,0003
SC-CH950  ,ドルビー・ミニコンポ  ,162000   ,0003
SF-SDCD   ,全角漢字              ,19000    ,0009
TH-19VS30 ,コンパクトTVBS19,120000   ,0001
TH-21VS30 ,コンパクトTVBS21,128000   ,0001
TH-25GF10 ,衛星放送内蔵TV25  ,168000   ,0001
TH-25GV10 ,ビデオ内蔵型TV25  ,255000   ,0001
TH-25VS30 ,コンパクトTVBS25,11300    ,0001
TH-29GF10 ,カラーTV画王BS29,220000   ,0001
TH-29GV10 ,ビデオ内蔵型TV29  ,280000   ,0001
TH-33VS35 ,カラーTV画王BS33,350000   ,0001