PowerShell -Part 6

■ このスレッドは過去ログ倉庫に格納されています
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/

次スレは>>980が立ててね!!
2022/05/29(日) 15:56:20.58ID:2VGP7oaH
bash -c "paste -d , a.csv b.csv"
2022/05/29(日) 18:24:56.01ID:maoDzYC5
カラムの順序指定もしたいみたいだから、cutとかでもう1処理いるね。

PowerShellだと
(>>338) | ConvertFrom-Csv | select id,name,address,phone,gender | ConvertTo-Csv
ただしConvertFrom-Csv・ConvertTo-Csvは
元データを正確に再現する必要がある場合には難あり。
(Trim()が掛かるとかダブルクォーテーションで括られるとか。)
2022/05/29(日) 18:27:45.99ID:maoDzYC5
paste使えない環境とか、Trim()掛かると困るとか、PowerShellだけで実装したい場合
function Merge-Csv {
  Param (
    [Object[]] $InputObject,
    [string[]] $Header,
    [char] $Delimiter = ','
  )
  $tbl = [Data.DataTable]::new()
  # 1行目をカラム名として使用
  foreach ($csv in $InputObject) {
    $tbl.Columns.AddRange(($csv[0].Split($Delimiter)))
  }
  # 各CSVの同じ行同士をDataRowにする。
  for ($lineIdx = 0; $lineIdx -lt $InputObject[0].Length; $lineIdx++) {
    $rowData = @(
      foreach ($csv in $InputObject) {
        $csv[$lineIdx].Split($Delimiter)
      }
    )
    $null= $tbl.Rows.Add($rowData)
  }
  # カラム順序を指定順序に変更する。
  for ($order = 0; $order -lt $Header.Length; $order++) {
    $tbl.Columns[$Header[$order]].SetOrdinal($order)
  }
  # CSV形式で出力
  foreach ($row in $tbl.Rows) {
    $row.ItemArray -join $Delimiter
  }
}
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況