8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Talend】2つのコンポーネントだけで簡単に設定ファイルを読み込む

Posted at

#概要
Talendを使用する際、外部化した設定ファイルを利用したい場合が多いと思います。
しかし、、、ファイルを読み込んで~
…コメント行をフィルタリングして~
…最初の「=」でkey、valueをフィールド分割して~…
と処理させるのは 面倒くさい やりたくない。
 ※tExtractDelimitedFieldsで簡単にフィールド分割できるかと思いきや
  2つ目の「=」にも分割をかましてvalue内に「=」が使えない:innocent:

という訳で標準コンポーネントを2つ使うだけで簡単に設定ファイルを読み込む方法を残します。

#実装
以下のように2つのコンポーネントのみで実装可能です。
①tFileInputProperties
②tContextLoad

※コンテキスト変数には、「test1~7」と「memo1~2」を設定しています。

設定ファイル読み込み_ジョブ全体2.png

##①tFileInputProperties

iniファイル読み込み時の処理
行頭が「#」または「;」の行はコメントと認識される
セクションは角カッコ([XXX])の形で指定できる。
※今回の例のように取得モードを「すべて取得」とした場合はセクションの行がなくても読み込んでくれる
keyとvalueは最初の「=」または「:」で分割される
2つ目以降の「=」または「:」はvalueの値として読み込まれる
空行は無視される
keyとvalueの前後の半角スペース、タブはトリムされる
Javaのコメントアウト /* */ は効果がない

###基本設定
tFileInputProperties_1.png

スキーマ 固定値。フォーマットや取得モードに応じて変化する。
フォーマット 「.ini」or 「.properties」
※「.properties」を選択した場合、全角文字が文字化けするため「.ini」推奨
取得モード フォーマットに「.ini」を選択した場合に設定可能。

【すべて取得】
 セクションに関係なくすべての設定を取得する

【セクションを取得】
 セクション名のみを取得する

【セクションごとに取得】
 指定したセクションの設定のみ取得する
ファイル名 読み込む設定ファイルを指定

###詳細設定
tFileInputProperties_2.png

エンコーディング 読み込みファイルの文字コードを設定する。
※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ファイルが以下となります。

test.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を[]で囲んでいます。

設定ファイル読込み_実行結果.png

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のファイル名をコンテキスト変数化することで
以下の記事のように試験用、商用と使い分けも可能ですので是非活用してみてください。

Talend入門(13) ~設定ファイル読み込み~

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?