はじめに
今回は文字数を基準にしてセルを区切っていきたいと思います。固定長区切りのデータを取り込むときに使えます。
今回のテーマ ~Cell Splitter by position~
覚えてほしいこと
固定長のデータを区切りたいときは、Digit数ではなく文字数で
やりたいこと
やりたいのは、固定長のデータを取り込んでテーブルの形にすることです。例えば、TeraPadを使うとデータのすぐ上に数字がありますよね。この数字(digit数)を基準にコラムを分けていきます。固定長のデータは、古いシステムからの出力データにありがちですね。
Excelでは、データ>区切り位置から選択できる、「固定長フィールドのデータ」の区切り位置から区切れます。この操作の自動化がやりたいことです。
Cell Splitter By Positionの使い方
固定長のデータを取り込む際によく使用します。もちろん、他の用途でもOKです。注意点は、文字数で管理されているので、Digitではない点です。日本語は2digitですが、1文字としてカウントされます。
Workflow
まずFile Readerで固定長のデータを一つのコラムとして取り込み、そこから分割していきます。
File ReaderのConfigureは下記のように、何も処理を行わないようにしています。
Workflowは下記からダウンロードできます。
Confirm - Before After
File Readerで1つのコラムとして取り込んだ情報を文字数を基準に3つのコラムに分割できていると思います。また、分割元コラムも残ります。
分割後のコラムは必ずStringになります。
Configure
文字数の部分だけ気を付ければ、そこまで難しくはないと思います。
Step1 - Split indices 区切る位置を文字数で指定
今回のデータでは、文字数が8文字目が終わった後と12文字目が終わった後で区切り線を入れたいです。その文字数をカンマで区切って「8,12」という形で入力していきます。
Step2 - New column names コラム名の指定
次に区切られたあとのコラム名を指定します。今回は2つの位置で区切るので、3つの新しいコラムができると思います。なので、それらの新しいコラム名をカンマで区切って、「日付,社員番号,残業時間」という風に入力していきます。
Step3 - Target Column
Step1,2で指定した区切りを行いたいコラム名を指定します。今回はCol0が区切りたいコラムだったと思うので、Col0を指定します。
ここでの注意点は、分割対象のコラムはStringでないといけません。
ちょっと一言
注意: 日本語が混じっているデータの区切り
先ほどから何度も「Digit数ではなく、文字数」 と繰り返してきました。これについて社員表の固定長のデータをもとに考えてみたいと思います。
前提として、全角は2digit、半角は1digitということを押さえておきましょう。つまり、全角の日本語は、半角英語2文字分の幅を取っているということです。
社員表のデータでは、都道府県の欄で、1文字差があります。この差を埋めるスペースが全角スペース1つなのか、半角スペース2つなのかでどう変わるかを見ていきます。Digit数は同じですね。
全角スペース1つの場合
はい、このようにきれいに区切れていますね。全角・半角が文字数でうまく合っていればきれいに区切れます。
半角スペース2つの場合
このように、半角スペース2つだと、文字数が余計にカウントされてしまうため、うまく区切れません。
ということで、文字数には気をつけましょう!
おわりに
中級編もだいぶ増えてきましたね。もうほとんど使えるようになったのではないでしょうか。このブログが皆さんの業務効率化に少しでも役立っていれば時間をかけて書いている甲斐あるなーと思います!ではまた!
余談
位置で離れてしまうというところから、おススメしたいのが「LION /ライオン 25年目のただいま」です。もう、あらすじで結論はほとんどわかるんですが、もうとてもとても感動します。25年間離れ離れってどんな気持ちなんでしょう。これ実話なんでさらに感動します。泣きたいときはぜひ。
参考リンク
- KNIME公式Node Pit(英語):
Cell Splitter By Position — NodePit
- KNIME Example Workflow(英語):
Cell Splitter By Position – KNIME Hub