WebSphere Transformation Extender
CSVファイル変換
ハンズオン演習
日本アイ・ビー・エム株式会社
WebSphereサービス
シナリオ
この演習で行う作業は図のようになります。 002,田中 洋介,YSL・IST・金融NWSOL開発,大和 003,小野 真樹,YSL・WebSphereサービス,箱崎 00002,田中洋介,大和 YSL・IST・金融NWSOL開発 00003,小野真樹,箱崎 YSL・WebSphereサービス 入力データ ①文字埋め ②文字の結合 ③文字の入替 ④スペースの挿入WTXによるCSV変換
WTXでCSV変換を行うには、まず始め に、入力データの構造と出力データの 構造を定義します – 定義にはType Designerを使います 次に、入力データの各項目と出力デー タの各項目をマップします – マッピングにはMap Designerを使い ます 最後に、ツール上でテストして結果を確 認します – テストにはMap Designerを使いますデータ構造の設計
データ構造の作成
マッピング
テスト
データ構造の設計
Type Designerでデータ構造を定義す る前に、WTXでのデータ構造の考え方 を習得します まず、Type Designerではデータを3つ の型に分類します – アイテム – グループ – カテゴリーデータ構造の設計
データ構造の作成
マッピング
テスト
アイテムとグループ
アイテムは意味のある最小のオブジェクト(CSVではフィールド)です まずは、すべてのデータをアイテムに分解します 次にグループを定義します グループにはアイテムまたはグループが含まれます 上の例ではEmpRecordがグループになります CSVの場合、グループ内は同じ区切り文字を使うようにします 002,田中 洋介,YSL・IST・金融NWSOL開発,大和<CR><LF> 003,小野 真樹,YSL・WebSphereサービス,箱崎<CR><LF> ID LastName FirstName Department LocationEmpRecord EmpName
アイテムとグループ
EmpRecordグループは1行分のデータにあたるので、これを複数行分まとめたものが
ファイル全体となり、EmpFileグループと定義します
結果としてアイテムとグループは図のような階層構造をとることになります
WindowsではUTF-8ファイルには先頭にByte Order Mark(BOM)という識別子があ るため、EmpFileの先頭文字にBOMの3バイト(<<EF>><<BB>><<BF>>)を追加しま す。
EmpFile
EmpRecord(s)
ID
EmpName
LastName
FirstName
Department
区切り文字
区切り文字はグループを定義するために使われています
例では区切り文字として以下のようなものを使っています
–
カンマ(,)
–
スペース(<SP>)
区切り文字の位置によって以下の分類を行います
–
接頭部(^A^B^C)
–
中置き(A^B^C)
–
後置(A^B^C^)
グループと区切り文字
002,田中 洋介,YSL・IST・金融NWSOL開発,大和<CR><LF>
003,小野 真樹,YSL・WebSphereサービス,箱崎<CR><LF> ID LastName FirstName Department Location
EmpRecord EmpName グループ名 区切り文字 位置 EmpName <SP> 中置き 中置き EmpRecord ,
カテゴリー
アイテムやグループはカテゴリーの下に所属させることができます
カテゴリーの下に新規に作成されるアイテムやグループはカテゴリーのプロ
パティーを継承します
この継承という性質を利用するために、Type Designerでは、始めにカテゴ
リーを定義します
–
例えば、文字データと数値データ
• エンコードを日本語、UTF-8で継承、数値のフォーマットを継承–
例えば、グループとアイテム
–
例えば、入力データと出力データ
データ構造の作成
データ構造の作成はType Designerを 使って行います Type Designerではデータ構造のこと をタイプ・ツリーと呼んでおり、この演習 では入力用と出力用のデータ構造を1つ のタイプ・ツリーを使って作成しますデータ構造の設計
データ構造の作成
マッピング
テスト
Type Designer
Type Designerを起動します
– スタート>すべてのプログラム>IBM
WebSphere Transformation
Extender 8.1>Design Studio>Type Designer
タイプ・ツリーの作成方法
「新規タイプ・ツリー作成」ボタンをクリックしま す TypeTree1ができます – このビューをナビゲーターと呼んでいます – 右側にあるのはプロパティー・ビューです – カテゴリー、グループ、アイテムすべてに 継承されるプロパティーをもっているのが 最上位タイプ(ROOT)です ROOTのプロパティーを編集し、名前を変更し ます – 名前を「CSV_Demo」にします – Enterキーを押して変更を確定させます 一旦、保存します – ファイル名を「CSVTypeTree」にして保存 しますカテゴリーの追加
以下のカテゴリーをCSV_Demoの下に追加します
カテゴリー名 用途
FIELD アイテムを格納する
カテゴリーの追加方法(1)
FIELDカテゴリーを追加します – 「CSV_Demo」を右クリックして、コン テキスト・メニューから「新規」を選び ます – 「新規タイプを追加しますか?」という ダイアログは「はい」を選びます – ナビゲーターで「新規カテゴリー1」を クリックして、プロパティーの名前を 「FIELD」に変更します – プロパティーのクラスは「カテゴリー」 のままにしておきます – アイテム・サブクラス>各国語を「日 本」にし、データ言語を「UTF-8(非推 奨)」にしますカテゴリーの追加方法(2)
NUM_FIELDカテゴリーを追加します – 「CSV_Demo」を右クリックして、コン テキスト・メニューから「新規」を選び ます – 「新規タイプを追加しますか?」という ダイアログは「はい」を選びます – ナビゲーターで「新規カテゴリー1」を クリックして、プロパティーの名前を 「NUM_FIELD」に変更します – プロパティーのクラスは「カテゴリー」 のままにしておきます – アイテム・サブクラスを「数値」に変更 しますアイテムの追加
以下のアイテムをFIELDとNUM_FIELDカテゴリーの下に追加します
アイテム名 カテゴリー名 サブクラス 埋める文字数 位置 用途 NUM_FIELD NUM_FIELD FIELD FIELD OUT_NAME FIELD テキスト 出力用名前 3 FIELD FIELD 入力データ用ID 右寄せ 数値 5 数値 テキスト テキスト 出力データ用ID テキスト 右寄せ テキスト 姓 名 部門名 事業所 IN_ID OUT_ID LAST_NAME FIRST_NAME DEPT LOCATIONアイテムの追加方法(1)
IN_IDアイテムを追加します – 「NUM_FIELD」を右クリックして、コンテキスト・メ ニューから「新規」を選びます – 「新規タイプを追加しますか?」というダイアログ は「はい」を選びます – ナビゲーターで「新規カテゴリー1」をクリックして、 プロパティーの名前を「IN_ID」に変更します – クラスは「アイテム」に変更します – 「これによってタイプのクラスが変更されます。続 行しますか?」というダイアログは「はい」を選びま す – アイテム・サブクラス>文字で埋めるを「Yes」にし ます – 埋める文字数>長さを「3」にします 同様にしてOUT_IDアイテムを追加します – プロパティーのアイテム・サブクラス>文字で埋め る>埋める文字数>長さを「5」にしますアイテムの追加方法(2)
LAST_NAMEアイテムを追加します – 「FIELD」を右クリックして、コンテキスト・メ ニューから「新規」を選びます – 「新規タイプを追加しますか?」というダイ アログは「はい」を選びます – ナビゲーターで「新規カテゴリー1」をクリッ クして、プロパティーの名前を 「LAST_NAME」に変更します – プロパティーのクラスは「アイテム」に変更 します – 「これによってタイプのクラスが変更されま す。続行しますか?」というダイアログは 「はい」を選びます 同様にしてFIRST_NAME、OUT_NAME、 DEPT、LOCATIONアイテムを追加しますグループ化の方法
次のページからは、グループを定義するために、入力用データ、出力用デー
タの文字区切り方法を確認します
区切り文字によってグループを定義していることを確認してください
複数行のデータを扱えるようにするためファイル全体をグループにしています
出力用データのOUT_DEPTグループのようにスペース(<SP>)を新たな区
切り文字として指定することで入力時の区切り文字(カンマ(,))から変更する
ことができます
入力用データ・グループ
002,田中 洋介,YSL・IST・金融NWSOL開発,大和<CR><LF>
003,小野 真樹,YSL・WebSphereサービス,箱崎<CR><LF>
IN_ID LAST_NAME FIRST_NAME DEPT LOCATION
IN_RECORD IN_NAME グループ名 区切り文字 位置 先頭文字 終了文字 なし なし <NL> なし 中置き 中置き IN_NAME <SP> IN_RECORD , IN_FILE
出力用データ・グループ
00002,田中洋介,大和 YSL・IST・金融NWSOL開発<CR><LF>
00003,小野真樹,箱崎 YSL・WebSphereサービス<CR><LF>
OUT_ID OUT_NAME LOCATION DEPT
OUT_RECORD OUT_FILE OUT_DEPT グループ名 区切り文字 位置 先頭文字 終了文字 なし なし <NL> なし 中置き 中置き OUT_DEPT <SP> OUT_RECORD ,
グループの追加
以下のグループをCSV_Demoの下に追加します
グループ名 区切り文字 位置 先頭文字 終了文字 IN_NAME <SP> 中置き なし なし IN_RECORD , 中置き なし <NL> IN_FILE なし <<EF>><<BB>><<BF>> なし なし <NL> なし なし なし <<EF>><<BB>><<BF>> 中置き 中置き OUT_FILE なし OUT_DEPT <SP> OUT_RECORD ,グループの追加方法(1)
IN_NAMEグループを追加します – 「CSV_Demo」を右クリックして、コンテキスト・メ ニューから「新規」を選びます – 「新規タイプを追加しますか?」というダイアログ は「はい」を選びます – ナビゲーターで「新規カテゴリー1」をクリックして、 プロパティーの名前を「IN_NAME」に変更します – プロパティーのクラスは「グループ」に変更します – 「これによってタイプのクラスが変更されます。続 行しますか?」というダイアログは「はい」を選びま す – プロパティーのグループ・サブクラス>形式を「指 定」にします – 構文アイテムを「区切り文字で区切られている」に します – 区切り文字>値を「<SP>」にします – さらにその下の位置を「中置き」にします 同様にしてOUT_DEPTも追加しますグループの追加方法(2)
IN_RECORDグループを追加します – 「CSV_Demo」を右クリックして、コンテキスト・メ ニューから「新規」を選びます – 「新規タイプを追加しますか?」というダイアログ は「はい」を選びます – ナビゲーターで「新規カテゴリー1」をクリックして、 プロパティーの名前を「IN_RECORD」に変更しま す – プロパティーのクラスは「グループ」に変更します – 「これによってタイプのクラスが変更されます。続 行しますか?」というダイアログは「はい」を選びま す – プロパティーのグループ・サブクラス>形式を「指 定」にします – 構文アイテムを「区切り文字で区切られている」に します – 区切り文字>値を「,」にします – さらにその下の位置を「中置き」にします – 構文アイテム>終了文字を「リテラル」にします – その下の値を「<NL>」にします グループの追加方法(3)
IN_FILEグループを追加します – 「CSV_Demo」を右クリックして、コンテキ スト・メニューから「新規」を選びます – 「新規タイプを追加しますか?」というダイ アログは「はい」を選びます – ナビゲーターで「新規カテゴリー1」をクリッ クして、プロパティーの名前を「IN_FILE」 に変更します – プロパティーのクラスは「グループ」に変更 します – 「これによってタイプのクラスが変更されま す。続行しますか?」というダイアログは 「はい」を選びます – 構文アイテム>先頭文字を「リテラル」にし ます – その下の値を「<<EF>><<BB>><<BF>>」 にします 同様にしてOUT_FILEも追加しますグループおよびアイテムの階層構造
グループおよびアイテムの 階層構造を定義します 入力用データ、出力用デー タの階層構造は右図のよう になります – 上が入力用、下が出力 用です グループおよびアイテムは データ順に従って上から順 番に書かれています IN_FILE IN_RECORD(s) IN_ID IN_NAME LAST_NAME FIRST_NAME DEPT LOCATION OUT_FILE OUT_RECORD(s) OUT_ID OUT_NAME OUT_DEPT LOCATION DEPTグループおよびアイテムの階層化の方法
IN_NAMEグループにLAST_NAME、 FIRST_NAMEアイテムを追加します – IN_NAMEをダブルクリックしてコンポーネ ント画面を開きます – コンポーネントのフィールドに LAST_NAMEアイテムをドラッグ&ドロップ して追加します – 次に、FIRST_NAMEアイテムをその下の フィールドにドラッグ&ドロップして追加しま す – 追加した順番にアイテムが並びますので 必ずデータ順に追加してください – 追加が終わったら、コンポーネント画面を 閉じます – 確認ダイアログは「はい」を選びます 同様にして他のグループも階層化しますコンポーネントの繰返し
コンポーネントには同じグループやアイテムを追加することができません
コンポーネントの繰り返しが必要なときは以下のルールに従って記述します
(最小繰り返し回数:最大繰り返し回数)
–
デフォルトの状態は(1:1)で、必ず1回だけ出現することを意味します
–
数字が1つしか指定されていないときは、最小を0とします
–
(s)は繰り返し数が未知数を意味します(s = “some (unknown) number”)
最小最大 繰り返しルール
Date Field 1 5 Date Field(1:5)
最小最大 繰り返しルール
Date Field 1 5 Date Field(1:5)
コンポーネントの繰り返し設定方法
IN_FILEグループのIN_RECORD繰り返し ルールを設定します – IN_FILEをダブルクリックしてコンポーネン ト画面を開きます – コンポーネントのIN_RECORDフィールド を選択します – コンポーネント画面の上側(ルール・バー) に表示されている「IN_RECORD」のすぐ 後ろに「(s)」を追加して、「Enter」キーを押 します – IN_RECORDフィールドが右図のように 「IN_RECORD (s)」に変わったら、コン ポーネント画面を閉じます – 確認ダイアログは「はい」を選びます 同様にしてOUT_FILEグループの OUT_RECORDにも繰り返しルールを設定し ますタイプ・ツリーの解析
タイプ・ツリーができあがったら、タイプ・ ツリー構造に論理エラーが含まれてい ないかどうかをチェックします – CSVTypeTreeを保存します – ナビゲーターのCSV_Demoを選択し ます – メニューからツリー>解析>論理およ び構造を選択します – 解析結果がダイアログで表示されま す • エラーが0になるようにします • 警告およびエラーがあるときは「結 果」ボタンをクリックして解析結果ロ グを開きますType Designerの終了
CSVTypeTreeを保存して、Type Designerを終了します ここまででデータ構造の作成は終わりで すデータ構造の設計
データ構造の作成
マッピング
テスト
マッピング
ここからは入力データ用アイテムと出力 データ用アイテムをマップしていきます マップ作業はMap Designerで行いま すデータ構造の設計
データ構造の作成
マッピング
テスト
Map Designer
Map Designerを起動します
– スタート>すべてのプログラム>IBM
WebSphere Transformation
Extender 8.1>Design Studio>Map Designer
Map Designer各部の名称
ルール・バー
ナビゲーター 入力カード・ウィンドウ 出力カード・ウィンドウ
マップ・ソース・ファイルとマップ
マップとは、出力オブジェクトをどのように生 成するかを定義したもの – 実行可能マップ • ビルド、実行ができるマップ • すべてのマップのルートとなる – 関数マップ • 実行可能マップから呼びだされる マップ マップ・ソース・ファイル(.mms)とは、1つ以 上のマップを保存するもの マップには入力カードと出力カードが含まれま す – 入力カード、出力カードは複数あっても 構いません。 – カードは上から順番に処理されます。 マップ・ソース・ファイル 実行可能マップ 関数マップ ナビゲーターマップの作成
ここからは実際にマップと入力カード、出力 カードを作成しながら説明します 「新規マップ・ファイル」ボタンをクリックします 名前を付けて保存ダイアログが開きますので、 「CSV_Demo.mms」と入力して保存します – 保存場所はどこでも構いません ナビゲーターのマップ・ソース・ファイルの下に 現れたCSV_Demoを右クリックして「新規作 成」を選択します 新規マップ作成ダイアログが開きますので、 「EMP_Map」と入力し、「OK」します リスト・タブで見ると、CSV_Demoの配下に EMP_Mapが追加されたのがわかります入力カードの作成
前のページで作成したEMP_Mapに入力カー ドを作成します EMP_Mapの配下の入力カードを右クリックし て、「新規作成」を選択します 入力カード追加ダイアログが開きますので、 次の設定値を入力して、「OK」します – カード名:「EMP_IN」 – タイプ・ツリー:「CSVTypeTree.mtt」 – タイプ:IN_FILEを選択 – 入力単位:「S」 – 入力元:「File」 – パス名:「name8.txt」 • name8.txtファイルは入力データが入った ファイルです これで入力カードにIN_FILEグループの階層 構造が取り込まれました出力カードの作成
EMP_Mapの配下の出力カードを右クリックし て、「新規作成」を選択します 出力カード追加ダイアログが開きますので、 次の設定値を入力して、「OK」します – カード名:「EMP_OUT」 – タイプ・ツリー:「CSVTypeTree.mtt」 – タイプ:OUT_GROUP>OUT_FILEを選択 – 入力元:「File」 – パス名:「name8out.txt」 • name8out.txtファイルは出力データが入る 予定のファイルで、まだ存在していません これで出力カードにOUT_FILEグループの階 層構造が取り込まれましたデータのマッピング
入力カードは入力されるデータ構造を表しています 出力カードは出力されるデータ構造を表しています 出力カードのルール・フィールドに出力したい値を入力します 入力カードのアイテムを出力カードのルールへドラッグ&ドロップして入力することができます ルールには関数も用意されています 選択されたルールはルール・バーで編集できます複数行のデータを扱うために(1)
入力カードは入力単位を「S」としたので複数 行であっても取り込めるのですが、出力カード は1行ずつしか出力できないため、1行ごとに 関数マップを呼び出して出力させる必要があ ります ここでは関数マップ・ウィザードを使って関数 マップを作るための手順を説明します – OUT_RECORD (s)のルール・フィール ドをクリックします – ルール・バーに「= EMP_List()」と入力し ます – 入力カードのIN_RECORD (s)を EMP_List()の括弧の中へドラッグ&ド ロップします – 「Enter」キーを押して確定させます複数行のデータを扱うために(2)
関数マップ・ウィザードを使います – 出力カードのOUT_RECORD (s)の ルール・フィールドで右クリックして、 「関数マップ・ウィザード」を選択しま す – 関数マップ・ウィザードが開きますの で、「作成」ボタンをクリックして、次に 「閉じる」ボタンをクリックします – ナビゲーターにEMP_Listマップが現 れたのを確認してください入力データと出力データのマッピング
EMP_Listマップをダブルクリックして入力カードと出力カードを開きます 入力カードのアイテムを出力カードのアイテムのルール・フィールドへドラッグ&ドロップ します(ただし、OUT_NAMEのルールについては次のページで説明します) IN_RECORD IN_ID IN_NAME LAST_NAME OUT_RECORD OUT_ID OUT_NAMEルール関数による結合
OUT_NAMEは2つのアイテムを結合さ せて作ります OUT_NAMEのルールはルール・バー で定義します – OUT_NAMEのルール・フィールドを 選択します – ルール・バーに「=」と書いて、その後 ろへ入力カードのLAST_NAMEをド ラッグ&ドロップします – さらに、その後ろへ「+」と書いて、 FIRST_NAMEをドラッグ&ドロップし ます – 最後に「Enter」キーを押して確定しま すマッピングの終了
以上でマッピング作業は終了ですデータ構造の設計
データ構造の作成
マッピング
テスト
テスト
テストはMap Designerを使って行いま す すでにマッピング作業の中で実行マップ の入力カードと出力カードに入力デー タ・ファイルと出力データ・ファイルの場 所を設定してあります ここからはトレースの設定、ビルド、実行、 結果の確認を行いますデータ構造の設計
データ構造の作成
マッピング
テスト
マップのトレース設定
ここからはマップをテストするための準 備をしていきます ナビゲーターでEMP_Mapをダブルク リックしてEMP_Mapの入力カードと出 力カードを前面に出します メニューからマップ>設定を選択します マップ設定ダイアログが現れますので 以下の値を設定し、「OK」してください – スイッチ:「オン」 – 入力データのトレース:「すべて」 – サマリー:「オン」ビルド
実行可能マップEMP_Mapを選択して、 ツール・バーの「ビルド」ボタンをクリック します