HiÐΞClassic

(BizRobo)CSVの特定の値が含まれる行のみを抽出する方法

よっぴー
4 years ago
はじめにfindstrコマンドについて正規表現ロボットへの組み込みまとめ

はじめに

RPAツール、BizRobo!のTipsです。

noteからの移植第二弾です。

今回はBizRobo!を使ってCSVファイルから特定の値が含まれる行のみ抽出したいときにどうするかについての記事になります。

CSVファイルの全行から値を抽出したいときは、CSVファイルをDS上で開き「データ行繰り返し」ステップを使用して全行ループで回るようにし、「データ行の列を抽出」ステップで値を抽出することが可能です。

フローにすると以下のような形ですね。

では、特定の列に特定の値が含まれる行のみを抽出したいときはどうでしょうか。

①特定の列から値を抽出

②変数に特定の値が含まれるかを判定

③値が含まれない場合は次のループに進ませる

そうですね、この方法で可能ですね。

フローにすると以下のような形になります。

この方法でももちろん問題ありません。

BizRoboの機能を使って可能な方法としてはこれがシンプルだと思います。

ただ、行数が数万行など非常に多かった場合はいかがでしょう。

ループを回すのに結構な時間がかかると思います。

はい、大量のデータ扱うならデータベースを使えというのはおっしゃる通りですが一旦無しでお願いします。

今回は別の方法もあるよ、という紹介です。

findstrコマンドについて

WindowsOSには「findstr」というコマンドがあるのはご存じでしょうか。

ファイルの中から文字列検索をするコマンドです。

詳しくはマイクロソフト社のページをどうぞ。

参考サイト:https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/findstr

文字列検索をして、特定の値が含まれるデータだけを抽出できるので、

ロボットから「コマンドライン実行」ステップでコマンドを入力し、

Long Text型の変数に戻り値を格納すればデータを抽出できるというわけです。

例えばこんなCSVファイルがあったとします。

中身は気にしないでください。適当です。

今回は2列目が「piyo」で始まる行を抽出しようと思います。

このファイルから「piyo」が含まれるデータだけ取り出すとすると、こんな感じになります。

◆コマンド

findstr piyo C:\Users\username\Desktop\test.csv

◆結果

"hoge","piyo","fuga"

"hoge","1piyo","fuga"

"hoge","piyo","fuga"

"piyo","ppiyo","fuga"

"hooge","piyo","fuuga"

見ての通りpiyoが含まれるデータだけが抽出されました。

しかし何列目かに関わらず「piyo」が含まれるものを全部抽出してしまったので

このままでは使えません。

ではどうするか、ということで、正規表現の出番です。

正規表現

以下のようにコマンドを打ちます。

今回は検索に指定する文字を正規表現で指定しています。

◆コマンド

findstr "[,]*,[^,]piyo" C:\Users\username\Desktop\test.csv

◆結果

"hoge","piyo","fuga"

"hoge","piyo","fuga"

"hooge","piyo","fuuga"

今回は2列目にpiyoが入っているものだけ抽出できました。

"[,]*,[^,]piyo"

ここの部分が正規表現を使ったところです。

もし3列目を指定したい場合は以下のように

*,[^,]

を増やしてあげてください。

"[,]*,[,]*,[,]piyo"

正規表現については慣れていないと何のこっちゃ?という感じになるかもしれませんが、

使いこなせると幅が広がるので勉強しておいて損はないと思います。

(私も使いこなせているかというと疑問ですが)

一般的な正規表現については以下が参考になるかと思います。

参考サイト:https://murashun.jp/blog/20190215-01.html

今回でいうと、以下の部分はカンマ以外の文字という意味ですね。

[^,]

なので、CSVデータはカンマ区切りデータということで、

カンマ以外の文字 カンマ カンマ以外の文字 カンマ...

という感じで対象にしたい列を区切っていってます。

ロボットへの組み込み

さて、これをロボットに組み込むわけですが、

単純に設定するとこんな感じですね。

今回はベタ打ちですが、実際に使うときはコマンド内容やファイルパスを一旦変数に入れてエクスプレッションで組み合わせた方が後々のためにはいいと思います。

まとめ

今回はBizRoboというよりはWindowsコマンドの話になりましたね。

RPA全般として、ツールだけ使える状態でも一通りのロボットは作れると思いますが、

PCそのものやネットワーク関係に詳しくなったり、HTMLの構造を理解できるようになるなど、

幅広い知識を持っていると対応できる範囲が広がると思います。

どなたがおっしゃっていたかは覚えておりませんが、「RPAは総合格闘技」というようなことを聞いたことがあります。

RPAのツールのことだけ学ぶのではなく、様々な技術を学び、総動員して戦うことが必要なのだと理解しました。

私はまだまだ勉強が足りない部分が多いので、精進あるのみです。

もともとITエンジニアの方は色々知識がある方が多いと思いますが、

そうでない方はITパスポートの勉強をしてみると色々といいと思います。

少なくともエンジニアではない一般的な方々の中ではIT全般に詳しい人になれると思います。

だいぶ長くなってしまいましたが、おかしな部分があればご指摘ください。

あと、この方がもっといいよ!というようなことも歓迎です。

正直言ってWindowsコマンド詳しくないので詳しい方から見たら変なコマンドになっているかもしれないと思っています。


コメント
いいね
投げ銭
最新順
人気順
よっぴー
4 years ago
コメント
いいね
投げ銭
最新順
人気順
トピック
アプリ

Astar Network

DFINITY / ICP

NFT

DAO

DeFi

L2

メタバース

BCG

仮想通貨 / クリプト

ブロックチェーン別

プロジェクト

目次
Tweet
ログイン