🪟

PowerScriptでCSVファイルを検索(3カラム検索し2カラム目の内容表示)

2024/11/04に公開

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