前回は xml(パーサ)ノードを使ってxmlファイルから所望の部分を抜き出せることを確認しました。今回はcsv(パーサ)ノードを使ってcsvから切り出してみます。ネットワーク上でやり取りする場合はXMLやJSONが普通じゃないかと思います。が、伝統のCSV、お手軽なのでローカルには普通に蔓延っている感じもしないでもない
※「ブロックを積みながら」投稿順 index はこちら
冒頭のアイキャッチ画像にサンプルフローを掲げましたが、今回も一直線です。
-
- Injectノード、トリガをかけるだけ、payloadは使わない
- file inノード、サンプルCSVファイルを読み出して文字列として送る
- csvノード、送られてきた文字列をJSONオブジェクト化して下流へ
- debugノード、確認のため msg.payloadをデバッグウインドウにダンプ
file in ノードの設定を以下に示しますが、ファイルを読み取って加工もせず、文字列として垂れ流すだけの設定です。
サンプルCSVファイルとその読み取り設定Aでの読み取り
サンプルのCSVファイルは以下です。3つのフィールドがあり、カンマ区切り。真ん中のフィールドは数値のつもりです。前後の2つは文字列。ここで注目は3行目(3レコード目)です。フィールドの記載の無い空行が入っています。
最初のCSVパーサの設定が以下に。
-
- 数値を変換するに「チェック」、2番目のnumフィールドには数値が入る期待
- 空の文字を含むに「チェック」、これで空行も読み取られる?
読み取り結果がこちら。空行は nameフィールドが空文字列のレコードとして読み取られてました。
同じCSVファイルとその読み取り設定Bでの読み取り
今度は、同じサンプルCSVファイルを、空の文字を含むの「チェックを外して」読み取ってみました(設定Bと呼称。)
読み取った結果が以下に。空行はレコードとしては処理されず無視されているみたいです。
NULL値を含むCSVファイルとその読み取り設定Bでの読み取り
今度はサンプルCSVファイルの3行目に、nameフィールドの実体はあるのだけれど、残り2つは空(null)のレコードを配置してみました。こんな感じ。
これを先ほどの設定Bで読み取ると、レコードとして認識されているものの、生成されたJSONオブジェクトには、nameプロパティしかありません。残り2つのプロパティは無しです。
NULL値を含むCSVファイルとその読み取り設定Cでの読み取り
CSVファイルは変えず、CSVパーサの設定を以下のよう「null値を含む」に変更してみます(設定Cと呼称。)
今度は、nullであっても全フィールドが読み取れました。
CSVの処理時には、空行の有無、空のフィールドの有無など後段の処理の都合でいろいろあったりするので、この辺の制御は地味に使うかと。