データベースでテーブルから条件に合致するレコードだけ抽出するという場面は多いです。
PADでも、データテーブルから条件に合致する行を抽出したいことはあります。
しかし、そのものずばりのアクションがありません。
一応、成功した方法をメモしておきます。
やりたいこと
次のようなCSVから都道府県が「千葉県」の行だけを抽出します。
person.csv
郵便番号,都道府県,姓(漢字),名(漢字)
744-0050,山口県,田中,知哉
292-0040,千葉県,目黒,孝行
962-0029,福島県,柴田,麻衣子
252-0240,神奈川県,飯山,将
289-2129,千葉県,山本,裕子
981-1563,宮城県,山本,愛美
343-0092,埼玉県,岩田,花音
969-6187,福島県,渡瀬,美穂
906-0029,沖縄県,川上,忍
680-0026,鳥取県,中嶋,雄一
一行ずつチェックする方法
一行ずつチェックして合致したら新たなデータテーブルに挿入していく方法です。
うまくいきますが異常に処理が遅いです。
テクニックとしては、新たなデータテーブルを作るときに「新しいデータテーブルを作成する」アクションを使わず、「変数の設定」アクションを使います。
この方が圧倒的に楽です。
◎CSVファイルから読み取る
ファイルパス:person.csv
エンコード:システムの規定値※S-JISの場合。
生成された変数:CSVTable(Datatable)
◎変数の設定
変数:NewTable
値:%{ ^['郵便番号', '都道府県', '姓(漢字)', '名(漢字)'] }%
▼For each
反復処理を行う値:%CSVTable%
保存先:CurrentItem
▼If then
最初のオペランド:%CurrentItem['都道府県']%
演算子:と等しい
2番目のオペランド:千葉県
◎行をデータテーブルに挿入する
データテーブル:%NewTable%
挿入場所:データテーブルの末尾
%CurrentItem%
▲End
▲End
ファイルパス:person.csv
エンコード:システムの規定値※S-JISの場合。
生成された変数:CSVTable(Datatable)
◎変数の設定
変数:NewTable
値:%{ ^['郵便番号', '都道府県', '姓(漢字)', '名(漢字)'] }%
▼For each
反復処理を行う値:%CSVTable%
保存先:CurrentItem
▼If then
最初のオペランド:%CurrentItem['都道府県']%
演算子:と等しい
2番目のオペランド:千葉県
◎行をデータテーブルに挿入する
データテーブル:%NewTable%
挿入場所:データテーブルの末尾
%CurrentItem%
▲End
▲End
検索した結果を反映する方法
データテーブル内を検索するアクションを使います。
合致する行を返してくれればいいのですが、そうはならず、合致する「セル」を返します。
DataTableMatchesに次のように格納されます。1行目と4行目が該当するという意味です。
#,Row,Column
0,1,1
1,4,1
◎CSVファイルから読み取る
ファイルパス:person.csv
エンコード:システムの規定値※S-JISの場合。
生成された変数:CSVTable(Datatable)
◎変数の設定
変数:NewTable
値:%{ ^['郵便番号', '都道府県', '姓(漢字)', '名(漢字)'] }%
◎データテーブル内で検索または置換する
データテーブル:%CSVTable%
検索モード:検索
すべての一致:オン
検索するテキスト:千葉県
セルの内容が完全に一致する:オン
検索条件:列の場合
列のインデックスまたは名前:都道府県
生成された変数:DataTableMatches
▼For each
反復処理を行う値:%DataTableMatches%
保存先:CurrentItem
◎テキストを数値に変換
変換するテキスト:%CurrentItem['Row']%
生成された変数:TextAsNumber
◎行をデータテーブルに挿入する
データテーブル:%NewTable%
挿入場所:データテーブルの末尾
新しい値:%CSVTable[TextAsNumber]%
▲End
ファイルパス:person.csv
エンコード:システムの規定値※S-JISの場合。
生成された変数:CSVTable(Datatable)
◎変数の設定
変数:NewTable
値:%{ ^['郵便番号', '都道府県', '姓(漢字)', '名(漢字)'] }%
◎データテーブル内で検索または置換する
データテーブル:%CSVTable%
検索モード:検索
すべての一致:オン
検索するテキスト:千葉県
セルの内容が完全に一致する:オン
検索条件:列の場合
列のインデックスまたは名前:都道府県
生成された変数:DataTableMatches
▼For each
反復処理を行う値:%DataTableMatches%
保存先:CurrentItem
◎テキストを数値に変換
変換するテキスト:%CurrentItem['Row']%
生成された変数:TextAsNumber
◎行をデータテーブルに挿入する
データテーブル:%NewTable%
挿入場所:データテーブルの末尾
新しい値:%CSVTable[TextAsNumber]%
▲End
コメント