🪟
PowerScriptでCSVファイルを検索(3カラム検索し2カラム目の内容表示)
chatGPTでほぼ作成しました。備忘のために投稿
csvファイルの内容を調査することがあり、OfficeのAccessで調査していたが動作が重かったりしたので、スクリプト作成してみました。
仕様
- 検索対象は、本スクリプトと同じパスに保存しているcsvファイル(複数ファイル可能)
- csvファイルはansiで読み込み("-Encoding Default"の部分。修正すればutf-8でも可能)
- 検索する文字列はテキストファイルの内容を読み込む
("$searchValuesFilePath"の部分。複数指定可能) - 検索は3列目の内容を検索する
- 検索結果出力は「対象のファイル名」、「検索した文字列」、「2列目の内容」 を標準出力する
ソース
# 検索するCSVファイルが格納されているフォルダのパス
$folderPath = ".\"
# 指定フォルダ内のすべてのCSVファイルを取得
$csvFiles = Get-ChildItem -Path $folderPath -Filter "*.csv"
# debug
Write-Output "csvFiles: $csvFiles"
# 検索する値が保存されているテキストファイルのパス
$searchValuesFilePath = ".\search_values.txt"
# 抽出したデータ(3列目の内容)を格納する配列
$extractedResults = @()
# テキストファイルから検索する値を読み込む
$searchValues = Get-Content -Path $searchValuesFilePath
# 各CSVファイルを処理
foreach ($file in $csvFiles) {
# debug
Write-Output "file: $file"
# CSVファイルをインポート(ANSIエンコードで読み込み、カスタムヘッダーを指定)
# CSVファイルをインポート
$csvData = Import-Csv -Path $file.FullName -Encoding Default -Header Column1, Column2, Column3, Column4
# 各検索値に対して、CSVデータを検索
foreach ($searchValue in $searchValues) {
# 各行をループして、3列目の値をチェック
foreach ($row in $csvData) {
# 3列目の値が検索値と一致するかを確認
if ($row.Column3 -eq $searchValue) {
# 一致する場合は結果を配列に追加
$extractedResults += [pscustomobject]@{
file = $file
SearchValue = $searchValue
Column2Value = $row.Column2
}
}
}
}
}
# 抽出したデータを出力
if ($extractedResults.Count -gt 0) {
Write-Output "検索結果:"
foreach ($result in $extractedResults) {
# Write-Output "検索値 '$($result.SearchValue)' に一致する2列目の内容: $($result.Column2Value)"
Write-Output "File: '$($result.file)' 検索値: '$($result.SearchValue)' 内容: $($result.Column2Value)"
}
} else {
Write-Output "該当する行が見つかりませんでした。"
}
Discussion