IBM i (旧AS400）の自己学習メモ　ツール編０１　データ転送

# 自己学習メモインデックス

[IBM i (旧AS400）の自己学習メモ　インデックス](https://qiita.com/You_name_is_YU/items/3964849e7803c8eaf767)

# 概要

AS400に保存されているファイルのデータをテキストやExcel形式で取得したい場合があります。
そういった場合に便利なのが`データ転送`機能です。

私の環境はACSを利用しているため、そのACSを使ったデータ転送の方法についてまとめます。

# IBM i からのデータ転送

5250エミュレータのメニューから、[アクション] -> [IBM i からのデータ転送]を選択
<img width="972" alt="スクリーンショット 2020-05-01 10.57.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/948a9479-7316-b7a4-8904-2cf1b3b8a839.png">

参考として、YAMAGUCHI1ライブラリ内にある得意先マスタ（MTOKISKP）のデータを取得します。
以下はあくまでもサンプルなので、必要に応じてパスや名前は変更してください。

- ファイル名
    - YAMAGUCHI1/MTOKISKP
    - ライブラリ名／ファイル名　※メンバーが複数ある場合は　ファイル名（メンバー名）と指定する。
- 出力装置
    - ファイル
- 名前
    - `/Users/you_name_is_yu/Develop/as/DataTransfer/MTOKISKP/MTOKISKP.xlsx`

<img width="1027" alt="スクリーンショット 2020-05-01 11.45.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/e77e09ef-d898-488e-e65f-249c34e613d2.png">

[データ・オプション]ボタンを押下すると、SQLのSELECT句、WHERE句、ORDER BY句の他にも、Group By句やHaving句が指定できます。
ここでは、全件取得、全カラム取得をするため、SELECT句に*のみを指定していますが、WHERE句などを指定したい場合は、通常のSQL文のように指定します。
（Whereの例：　TOKNM like '%商店%'　など）
<img width="732" alt="スクリーンショット 2020-05-01 11.50.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/50c6701f-680e-c27d-cf64-0bed2ade27a1.png">

ファイルエリアにある[詳細]ボタンを押下すると、出力するファイルの種類（Excel,CSV,TSV）などを設定することが可能です。

- ファイル・タイプ
    - csv/txt/tsv/xlsx/xls/ods/dsr形式から出力ファイルのタイプが選択できます。
- ファイル・アクション
    - 既存ファイルに上書き
    - 基本的にはこの設定でOKですが、必要に応じて変更する。
- クライアント・ファイル記述
    - 後続のデータ転送でIBM i へのデータ転送をする場合にクライアント・ファイル記述（fdfx）が必要になるので、任意のパスに名前を付けて保存するのがおすすめ 。
    - `/Users/you_name_is_yu/Develop/as/DataTransfer/MTOKISKP/MTOKISKP.fdfx`

<img width="767" alt="スクリーンショット 2020-05-01 11.54.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/e187fdb7-353b-5042-1dcf-29a8f61a0fd0.png">

上記までの設定が終わったら、[転送の開始]ボタンを押下する。
転送が完了すると以下ような完了メッセージが表示される。

<img width="912" alt="スクリーンショット 2020-05-01 11.59.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/70c24789-2258-996a-d51f-a58bd8705b95.png">

以上でIBM i からのデータ転送は完了ですが、何度も同じファイルのデータをデータ転送機能で取得したい要件がある場合は、今行ったデータ転送の設定情報をまるっと保存しておいて、その保存したファイルを呼び出して利用するのが便利です。

[ファイル] -> [別名保管]
<img width="912" alt="スクリーンショット 2020-05-01 12.00.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/2e631fc3-34b0-f42d-63d4-0127c8a1ab7a.png">

任意のディレクトリにファイル名を指定して[保管]ボタンを押下し保存します。
<img width="662" alt="スクリーンショット 2020-05-01 12.03.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/6a72cd07-9fcb-dd92-517b-4ecd6a00d9aa.png">

保存したファイルはMacの場合、*.dtfxファイルへのアプリの紐付けがデフォルトではされていないので、
[ファイル] -> [開く]から、保存した*.dtfxファイルを指定すると、上記までで設定したデータ転送の設定を読み込んで、同じようにデータ転送によってデータを取得することが可能です。
（もちろん拡張子に関連アプリを紐づけてあげれば対象のファイルを実行するだけでデータ転送の設定を読み込んだ状態で起動してくれます。）
<img width="662" alt="スクリーンショット 2020-05-01 12.04.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/85cc7bba-b8a5-8ca2-5ee2-eaa79e1da01b.png">

# IBM i へのデータ転送

続いてIBM i へのデータ転送です。
IBM i へのデータ転送では、前述している中で出てきた *.fdfx ファイルが必要になります。
そのため、データ転送によってデータを登録したいファイルの *.fdfx ファイルがない場合は、まずIBM i からのデータ転送を行ってから、この手順を進めてください。

[アクション] -> [IBM i へのデータ転送]を選択

<img width="912" alt="スクリーンショット 2020-05-01 12.09.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/1dfb6ecc-1d57-e081-bc86-5189b6c765af.png">

- 入力装置
    - ファイル
- 名前
    - `/Users/you_name_is_yu/Develop/as/DataTransfer/MTOKISKP/MTOKISKP.xlsx`
    - *.fdfxで定義されている形式のファイル（ここではxlsx）を指定する。<br>IBM iからのデータ転送で保管した*.fdfxの定義で、CSVやTXTなどの形式を選んでいる場合には、その形式に合わせること。
- ライブラリー／ファイル（メンバー）
    - `YAMAGUCHI1/MTOKISKP`

<img width="912" alt="スクリーンショット 2020-05-01 12.18.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/d0703607-5f9e-a07e-e45a-71b1011a8e14.png">

[詳細]ボタンを押下してファイルの詳細を設定します。

- クライアント・ファイル記述を使用する
    - これが *.fdfx のファイル
    - このファイルを使用するのでチェックをつける
- IBM iオブジェクトの作成
    - ここではデータを**追加**したいので `いいえ、既存のメンバーに追加`を選択します。
    - ここで指定する選択肢は非常に重要なので**十分注意**してください。
        - いいえ、メンバーの置き換えのみ
            - 指定されたファイルを洗い替えする場合に使う
            - **※ファイルの中身がデータ転送でアップするデータで置き換えられます。<br>既存のデータは消えてしまうので注意してください。**
        - いいえ、既存のメンバーに追加
            - 指定されたファイルにデータを追加したい場合に使う

<img width="874" alt="スクリーンショット 2020-05-01 12.21.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/91a4574f-b792-d4a2-43c3-8df29fcfd8d9.png">

[転送の開始]ボタンを押下してデータ転送します。
ただ、xlsx形式だとどうも転送がうまくいかなかったので、データ転送するなら、csvやtsv形式のテキストベースで転送するのが良いと思います。

<img width="912" alt="スクリーンショット 2020-05-01 12.44.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/33f2a08c-7dc7-e3e8-ce09-47144152728c.png">