SQLでJOINを使って表結合するのは便利ですが、そのためにデータベースを構築するのも面倒なので、ハッシュテーブルで簡易に実装してみます。
まず、こんな感じのCSVを用意します。
date_moncster.csv
date,monster
2021-07-01,ピカチュウ
2021-07-02,イーブイ
2021-07-02,ピカチュウ
2021-07-03,カモネギ
それに対し、こんな感じのCSVで取得した値を結合します。
monster_value
monster,value
ピカチュウ,100
イーブイ,10
コードはこちら。
$monster_value = Import-Csv ".\csv_sample\monster_value.csv" -Encoding UTF8
$monster_hash = @{}
$monster_value | ForEach-Object {
$monster_hash.add($_.monster,$_.value)
}
Write-Output $monster_hash['ピカチュウ']
$date_monster = Import-Csv ".\csv_sample\date_monster.csv" -Encoding UTF8
$date_monster | ForEach-Object {
if ($monster_hash[$_.monster]){
Write-Host "$($_.date),$($_.monster),$($monster_hash[$_.monster])"
}
}
monster_hash
というやつが名前の通りハッシュテーブルです。これにモンスターごとの値を格納しておき、date_monster.csvから1行ごとに読み込みながら結合します。
こんな出力になります。
2021-07-01,ピカチュウ,100
2021-07-02,イーブイ,10
2021-07-02,ピカチュウ,100
カモネギの行が欲しい場合(SQLでいうところのOUTER JOIN)はifを取っちゃえばOKです。