1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellでのCSV入出力

Last updated at Posted at 2020-10-05

#はじめに
PowerShellを用いて、CSVを読み込み別フォーマットのCSVとして出力する方法。

#手順
Import-CSVを使用してCSVを読み込む。
Get-Contentを使用してもCSVの読み込みが行えるが、文字列としてに,(カンマ)が含まれているとずれてしまうのでImport-CSVを使用した方がよい。

$csv_a = Import-CSV -Encoding Default "入力.csv"

PsCustomObjectとして読み込まれる。

PS > $csv_a[0]

商品コード 商品名 個数 単価
---------- ------ ---- ----
0001       バナナ 10   100

データはJSON形式で管理しているっぽい。

PS > $csv_a
:
BaseObject          : {@{商品コード=0001; 商品名=バナナ; 個数=10; 単価=100}, @{商品コード=0002; 商品名=レモン; 個数=20;
                       単価=50}}

項目数が想定と一致しているのか確認する。
if ( $csv_a[0].psobject.properties.Name.Length -ne 4 ) {
    exit
}

中身がJSONなので、こんな書き方でも可能。

if ( ($csv_a[0] -split ';').Length -ne 4 ) {
    exit
}

出力用の項目を指定しながら値をセット。
[System.Array] $ExportDat = $null

foreach($line_a in $csv_a){

    $tmpDat = New-Object psobject

    $tmpDat | Add-Member -MemberType NoteProperty  -Name "名称" -Value $line_a.商品名
    $tmpDat | Add-Member -MemberType NoteProperty  -Name "金額" -Value ([int]$line_a.単価*[int]$line_a.個数)

    $ExportDat += $tmpDat
}

CSV形式で出力。

$ExportDat | Export-Csv -NoTypeInformation "出力.csv" -Encoding Default

CSVを出力する際に、ヘッダを出力したくない場合にはExport-Csvを使わずにConvertTo-Csvで出力を行い、-skip 1でヘッダ行をスキップする。

また、ダブルクォーテーションを付与したくない場合には-replaceで置換を行う。

$ExportDat  | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 |  % {$_ -replace '"',''} | Set-Content "出力.csv"

#終わりに
Cとかでがりがり組むのと比べて速度にちょっと難はあるけど、ちょっとしたデータの加工にはなかなか便利。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?