#概要
Talendを使用する際、外部化した設定ファイルを利用したい場合が多いと思います。
しかし、、、ファイルを読み込んで~
…コメント行をフィルタリングして~
…最初の「=」でkey、valueをフィールド分割して~…
と処理させるのは 面倒くさい やりたくない。
※tExtractDelimitedFieldsで簡単にフィールド分割できるかと思いきや
2つ目の「=」にも分割をかましてvalue内に「=」が使えない
という訳で標準コンポーネントを2つ使うだけで簡単に設定ファイルを読み込む方法を残します。
#実装
以下のように2つのコンポーネントのみで実装可能です。
①tFileInputProperties
②tContextLoad
※コンテキスト変数には、「test1~7」と「memo1~2」を設定しています。
##①tFileInputProperties
iniファイル読み込み時の処理 |
---|
行頭が「#」または「;」の行はコメントと認識される |
セクションは角カッコ([XXX])の形で指定できる。 ※今回の例のように取得モードを「すべて取得」とした場合はセクションの行がなくても読み込んでくれる |
keyとvalueは最初の「=」または「:」で分割される |
2つ目以降の「=」または「:」はvalueの値として読み込まれる |
空行は無視される |
keyとvalueの前後の半角スペース、タブはトリムされる |
Javaのコメントアウト /* */ は効果がない |
スキーマ | 固定値。フォーマットや取得モードに応じて変化する。 |
---|---|
フォーマット | 「.ini」or 「.properties」 ※「.properties」を選択した場合、全角文字が文字化けするため「.ini」推奨 |
取得モード | フォーマットに「.ini」を選択した場合に設定可能。 【すべて取得】 セクションに関係なくすべての設定を取得する 【セクションを取得】 セクション名のみを取得する 【セクションごとに取得】 指定したセクションの設定のみ取得する |
ファイル名 | 読み込む設定ファイルを指定 |
エンコーディング | 読み込みファイルの文字コードを設定する。 ※Shift_JISの設定ファイルを読み込む場合は「Windows-31J」または「MS932」を設定してください。 ※ファイルの文字コードがCP932の場合は「SJIS」、「Shift_JIS」でも問題ありません。 |
---|
##②tContextLoad
key、valueのデータを渡すことで[Contexts]タブで設定したコンテキスト変数に値を設定してくれるコンポーネントです。
設定ファイルに存在するkeyがコンテキスト変数に存在しない場合の動作など、色々弄れますが今回は割愛。
公式のドキュメントでお茶を濁させてください。。。
■tContextLoad - 7.0 - Talend Help Center
https://help.talend.com/reader/t77PffDe~1iumPvFKrl43Q/dcaRXTdbxQEQVCG6oGqgZA
#今回読み込む設定ファイル(ini)
今回のジョブで取り込む想定のiniファイルが以下となります。
[check]
#test1=aaa
;test2=bbb
/*
test3=ccc
*/
test4: ccc
TEST4=ddd
test5= eee
test6= f f f
test7=aaa=bbb:ccc
[multibyte]
memo1=あいうえお
memo2=、。・¥~
#実行結果
コンテキスト変数にセットされている値を確認するために、最初にお見せしたジョブに処理を追加したものです。
※空白がわかりやすいようにvalueを[]で囲んでいます。
key | value | 簡単な解説 |
---|---|---|
test1 | 空文字 | 「#」でコメントアウトされているため、値がセットされない。 |
test2 | 空文字 | 「;」でコメントアウトされているため、値がセットされない。 |
test3 | ccc | 「/*」「*/」ではコメントアウトされないため、そのまま値がセットされる。 ※因みに1行に「/* test3=ccc */」と書いた場合、「/* test3」をkeyとするため、セットされませんがコメントアウトとはなりません・・・実質コメントアウトになってますが。。。 |
test4 | 空文字 | わかりずらいですがtest4の行のkeyとvalueの前に全角スペースが存在しているため、keyが一致せず、値がセットされません。 また、大文字小文字の区別をするため、TEST4の値は設定されません。 |
test5 | eee | keyとvalueの前後のタブはトリムされてセットされる。 |
test6 | f f f | keyとvalueの前後の半角スペースはトリムされてセットされる。 |
test7 | aaa=bbb:ccc | 2つ目以降の「=」及び「:」はvalueとして処理される。 |
memo1 | あいうえお | マルチバイト文字も文字化けせずにセットされる。 |
memo2 | 、。・¥~ | マルチバイト文字も文字化けせずにセットされる。 |
#まとめ
標準コンポーネントを2つ使うだけで簡単に設定ファイルを読み込む方法を記載しました。
tFileInputPropertiesのファイル名をコンテキスト変数化することで
以下の記事のように試験用、商用と使い分けも可能ですので是非活用してみてください。