ふと、ウインドウを開いて、貼り付けて、Exactして・・・が面倒臭かった。
例えば、諸々の事情でCSVを出して比較しなきゃいけない時、貼り付けるのも面倒だった・・・。
スクリプトが書けるとは、作業のIOがわかっているということ、と先輩に教えてもらった。
あぁ、整理できていなかったんだなぁと反省だ。
例えば、JSONのデータだけど、エビデンスはCSVにしなければならない場合などは、どうするか?
# JSONファイルが格納されているディレクトリ
$jsonDirectory = "C:\path\to\your\json_files"
# 実行時刻を含む出力CSVファイルのパス
$timestamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
$csvFilePath = "C:\path\to\your\output_$timestamp.csv"
# JSONフォルダ内の最初のJSONファイルを取得
$jsonFile = Get-ChildItem -Path $jsonDirectory -Filter *.json | Select-Object -First 1
# JSONファイルが存在する場合、データを抽出
if ($jsonFile) {
# JSONファイルを読み込んでオブジェクトに変換
$jsonData = Get-Content -Path $jsonFile.FullName | ConvertFrom-Json
# HEADER.TITLEを取得
$headerTitle = if ($jsonData.HEADER) { $jsonData.HEADER.TITLE } else { $null }
# LAYOUTが配列かどうかを確認し、各要素を展開
$flattenedData = @()
if ($jsonData.LAYOUT -is [System.Collections.IEnumerable]) {
foreach ($layoutItem in $jsonData.LAYOUT) {
$flattenedData += [PSCustomObject]@{
"HEADER.TITLE" = $headerTitle
"LAYOUT.NAME" = $layoutItem.NAME
"LAYOUT.CONTENT" = $layoutItem.CONTENT
}
}
} else {
# LAYOUTが配列でない場合
$flattenedData += [PSCustomObject]@{
"HEADER.TITLE" = $headerTitle
"LAYOUT.NAME" = if ($jsonData.LAYOUT) { $jsonData.LAYOUT.NAME } else { $null }
"LAYOUT.CONTENT" = if ($jsonData.LAYOUT) { $jsonData.LAYOUT.CONTENT } else { $null }
}
}
# フラット化されたデータをCSVにエクスポート
$flattenedData | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8
Write-Output "CSVファイルが生成されました: $csvFilePath"
} else {
Write-Output "JSONファイルが見つかりませんでした。"
}
検証しないとアレだけれど、ひとまず、手打ちやExcelに貼り付けからは解放されそうだ。転記は機械に任せればいいのだ。
ショートカットでガチャガチャやっていたけど、どうなんだろうと思ってしまった次第だった。
挙動は未確認のため、検証後修正します。
コメント