とにかく動かすPAD – データテーブルから特定の行を抽出する方法

データベースでテーブルから条件に合致するレコードだけ抽出するという場面は多いです。
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

検索した結果を反映する方法

データテーブル内を検索するアクションを使います。
合致する行を返してくれればいいのですが、そうはならず、合致する「セル」を返します。

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

コメント

タイトルとURLをコピーしました