わんすけに聞いてみる WinActor [WinActor]CSVにSQL実行【抽出・削除】

[WinActor]CSVにSQL実行【抽出・削除】

いろいろ聞いてると、システムから取り出したCSVから必要な情報だけ他システムに連携したいけど、Excelでフィルタ編集しつつも、もっかいCSV化する時に数値とか電話番号の先頭が0落ちしないように幅広げて書式設定しなおす。

こんな操作を手順化して作業しているところも少なくない様だ。

直接CSV編集できるライブラリがあった方がいいよねってことで用意してみた。

細かい考え方はいいや、ソースコード頂戴!っていう方はページ最後へどうぞ。

このページのライブラリは、わんすけのライブラリにも追加しておきます。

[WinActor]スクリプト実行ライブラリ

 

1.CSVにSQL実行するという考え方。

ADODBというライブラリを使えば、CSVファイルに対してSQL実行ができます。

ADODBでCSVをロードする時には、ドライバをスクリプトの中で指定する必要があるのですが、今回は、「Microsoft Text Driver (*.txt; *.csv)」というのを使います。

Microsoft Text Driver を使ってCSVファイルをテーブルとして開く際には、いくつかの作法があるので纏めておきます。

 

1.ADODBのインスタンスを生成する。

 

2.ドライバを指定してコネクションを開く

ここで、CSVファイルが保存されているフォルダへのパスをしています。

オプションの最後の「ReadOnly=1」は、UPDATE文を使うときには「ReadOnly=0」にする感じです。

 

3.SQL文を実行する

コネクション開くときにフォルダパス指定してるので、FROM句でファイル名だけ指定すればOKってこと。

同じフォルダに複数CSVファイルを配置すれば、INNER JOINとかも使えます。

 

2.取り扱いの注意点

まず、データソースとかドライバーのお話。

仮に、ADODB使ったスクリプトをvbsファイルとして保存して実行した時にこんなエラーが出てしまうケースがあります。

 

[Microsoft][ODBC Driver Manager] データソース名および指定された既定のドライバーが見つけりません。

コード:80004005

 

実際、このエラーがでないでvbsとしても実行できる様に環境をセットアップする方法もあるのですが、そこはすこし話が長くなるので興味があればページの最後に参照リンク付けておいたので調べてみて下さい?

 

ただ、WinActorのスクリプト実行ノードで使う分にはWinActor自体がもともとDB接続とかできるようにセットアップされた環境になってるのか、32bitのCScript.exe使ってるのかわかんないけど、上記のエラーはでないと思います?

で、このMicrosoft Text Driverなんだけども、SQLでなんでもできるかっていうと実はDELETE文はサポート外だったりします。

実際に使うとこんなエラーがでます。

[Microsoft][ODBC テキスト Driver] この ISAM では、リンク テーブル内のデータを削除することはできません。

 

なので、この記事のタイトルでは【抽出・削除】としてますが、厳密には削除の処理を実現したい場合には「削除後に残したいレコードの抽出条件でSELECT文を書いて新しいCSVを作る。」という実装方法になります。

 

3.実装例

上記を踏まえ、実装を考えるとこうなります。

読み取り対象のCSVがあるかチェックして、SQL文をビルドして実行してテキスト出力と。

 

4.適用イメージはこんな感じかな

備考

CSVに対してSELECT文のSQL実行を行い、結果を別ファイルとしてCSV出力を行います。

WHERE句には、 [項目名]=値 の様な形で抽出条件を指定します。

レコードを削除したい場合は、残したいレコードを選択するWHERE句を指定して下さい。

 

あー・・・、あとSQL知らない人もいるのか?

そのうちコピペライブラリのコンテンツにSQL追加しようかな?


 

※ 参考リンク ※
64bit OSでADODBテキストドライバを使う

64 ビット版の Windows で、ODBC アドミニストレーター ツールが 32 ビットと 64 ビット両方のユーザー DSN を表示する

Microsoft Access 2016 Runtime

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント

わんすけへ寄付金を送る

このサイトの情報が役に立ったなーって思う方がいらっしゃれば、

是非「わんすけに缶コーヒー1本でもご馳走する」気持ちでポチってあげて下さい?

¥120

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Related Post

[WinActor]ブラウザ関連 値を取得して更新して更新ログ残す。[WinActor]ブラウザ関連 値を取得して更新して更新ログ残す。

ブラウザ関連で、設定値の一覧から順番にデータを検索・更新するんだけど システム側の値を更新した時は更新した個所のログが欲しいって場合の話。 普通にサブルーチングループ使って実装せいって話なんだけど ブラウザ関連のライブラ […]