EFファイル/DファイルをPowershellで扱う
なんでいきなりPowershellなの?
えーと、ご存じない方のために説明すると、Powershellはコマンドプロンプトの強化版みたいな奴です。
将来的にはコマンドプロンプトを置き換える方向に進むみたいですね。
さて、なんでPowershellかと言うと・・・
Import-Csvコマンドが便利
Import-Csv
コマンドは、かなり大きなサイズのCSVでも読み込めて、しかも何の苦労も要りません。
例えば、
$x = Import-Csv efile.txt -Delimiter "`t" -Encoding Default
と打てば、同じディレクトリにあるefile.txtをタブ区切りテキスト形式で読み込んで、変数$x
に格納できます。
読み込んだデータはテキストでは無くオブジェクトになります。
ヘッダがある場合、ヘッダに対して各列が紐付く形になります。
つまりどういうことかと言えば、
$x.データ識別番号
などと打てば、データ識別番号の列だけを抽出できるんですね。
これは超便利です。PandasのDataFrameの簡易版みたいに使えます。
この関数がC#にあれば普通にC#使ってたかも…
メソッドが便利
上記の通り、データがオブジェクトになるため、メソッドが扱えます。
$x.退院年月日.replace("00000000","infinity")
上の例では、$xの属性退院年月日
にreplace
メソッドをかけて、文字列00000000をinfinityに置換しています。
ちなみに目的はPostgres読み込み前の前処理ですね。
Postgresで00000000を日付データとして読み込もうとするとエラーになるので・・・
データの上書き(2017-03-02追記)
データの上書きを行うには、一度foreachループを回す必要があります。 例えば
$x | foreach { $_.退院年月日 = $_.退院年月日.replace("00000000","infinity") }
という感じです。
実際にEF/Dファイルの退院年月日を修正するスクリプトをGitHubに置きましたので、参考までにどうぞ。
普段Pythonを触っていて、オブジェクトという概念に馴染みがあれば、Powershellは使いやすいシェルだと思います。
時間があれば触ってみるといいかも知れません。