1

最初の列の値に基づいて、その列の値を出力ファイル名として使用して、別の CSV ファイルに分割しようとしているソース CSV ファイル (ヘッダーなし、すべての列をコンマで区切る) を取得しました。

入力ファイル:

S00000009,2016,M04 01/07/2016,0.00,0.00,0.00,0.00,0.00,0.00,750.00,0.00,0.00
S00000009,2016,M05 01/08/2016,0.00,0.00,0.00,0.00,0.00,0.00,600.00,0.00,0.00
S00000009,2016,M06 01/09/2016,0.00,0.00,0.00,0.00,0.00,0.00,600.00,0.00,0.00
S00000010,2015,W28 2015/05/10,2275.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
S00000010,2015,W41 04/01/2016,0.00,0.00,0.00,0.00,0.00,0.00,568.75,0.00,0.00
S00000010,2015,W42 11/01/2016,0.00,0.00,0.00,0.00,0.00,0.00,568.75,0.00,0.00
S00000012,2015,W10 01/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00
S00000012,2015,W11 08/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00
S00000012,2015,W12 15/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00

私の PowerShell スクリプトは次のようになります。

Import-Csv INPUT_FILE.csv -Header service_id,year,period,cash_exp,cash_inc,cash_def,act_exp,act_inc,act_def,comm_exp,comm_inc,comm_def |
    Group-Object -Property "service_id" | 
    Foreach-Object {
        $path = $_.Name + ".csv";
        $_.group | Export-Csv -Path $path -NoTypeInformation
    }

出力ファイル:

S00000009.csv:

「service_id」、「年」、「期間」、「cash_exp」、「cash_inc」、「cash_def」、「act_exp」、「act_inc」、「act_def」、「comm_exp」、「comm_inc」、「comm_def」
"S00000009","2016","M04 01/07/2016","0.00","0.00","0.00","0.00","0.00","0.00","750.00","0.00"," 0.00"
"S00000009","2016","M05 01/08/2016","0.00","0.00","0.00","0.00","0.00","0.00","600.00","0.00"," 0.00"
"S00000009","2016","M06 01/09/2016","0.00","0.00","0.00","0.00","0.00","0.00","600.00","0.00"," 0.00"

S00000010.csv:

「service_id」、「年」、「期間」、「cash_exp」、「cash_inc」、「cash_def」、「act_exp」、「act_inc」、「act_def」、「comm_exp」、「comm_inc」、「comm_def」
"S00000010","2015","W28 05/10/2015","2275.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00"," 0.00"
"S00000010","2015","W41 04/01/2016","0.00","0.00","0.00","0.00","0.00","0.00","568.75","0.00"," 0.00"
"S00000010","2015","W42 11/01/2016","0.00","0.00","0.00","0.00","0.00","0.00","568.75","0.00"," 0.00"

列 1 (service_id) のヘッダー値を使用して、新しいファイルを生成しています。2つの問題があります。

  1. 出力 CSV ファイルには、必要のないヘッダー行が含まれています。
  2. 列は、必要のない二重引用符で囲まれています。
4

3 に答える 3

0

別の解決策として、

  • 名前付きヘッダーを使用せず、単に数字を使用します (とにかく出力には必要ないため)
  • 不要な一時ファイルを回避します。
  • 二重引用符を区切るフィールドのみを削除します。

Import-Csv INPUT_FILE.csv -Header (1..12) | 
  Group-Object -Property "1" | Foreach-Object {
    ($_.Group | ConvertTo-Csv -NoType | Select-Object -Skip 1).Trim('"') -replace '","',',' | 
       Set-Content -Path ("{0}.csv" -f $_.Name) 
}
于 2018-08-24T16:42:34.480 に答える