看起来类似于this answer。将字符串操作与本机 Csv cmdlet 混合使用的类似技术。
$CSVpath = "c:\temp\test1.csv"
$Data = Get-Content $CSVpath
$Headers = $Data[0] -split ','
$Data = ($Data | Select-Object -Skip 1) -replace '\"|,'
$Data | ConvertFrom-Csv -Header $Headers -Delimiter ";"
引入文件,使用第一行确定标题。然后使用带有-Headers 和-Delimiter 参数的ConvertFrom-Csv cmdlet 将剩余的行从CSV 转换为PSObjects。还替换了看起来多余的引用。
这将导致对象看起来像:
H1 h2 H3 H4 H5 H6 H7 H8 H9 H10
-- -- -- -- -- -- -- -- -- ---
A B C D E F G,,,,,,,,,,,,,,,,,
H I J K L M N O P Q
A B C D E F G,,,,,,,,H I J K
10 a C D,H I J K L M N
但是,尚不清楚要使用逗号做什么。我建议事先清理数据。
替换上一个答案中的逗号并覆盖原始文件:
$CSVpath = "c:\temp\test1.csv"
$Data = Get-Content $CSVpath
$Headers = $Data[0] -split ','
$Data = ($Data | Select-Object -Skip 1) -replace '\"|,'
$Data | ConvertFrom-Csv -Header $Headers -Delimiter ";" |
Export-Csv -Path $CSVpath -Delimiter ";" -NoTypeInformation
尽管导出,这应该是这样的:
H1 h2 H3 H4 H5 H6 H7 H8 H9 H10
-- -- -- -- -- -- -- -- -- ---
A B C D E F G
H I J K L M N O P Q
A B C D E F GH I J K
10 a C DH I J K L M N
注意:两个表都是使用Format-Table 输出的,默认情况下会截断一些列。使用Format-Table * -AutoSize 查看完整表格。
所有都可以缩短为:
$CSVpath = "c:\temp\test1.csv"
$Data = Get-Content $CSVpath
$Headers = $Data[0] -Split ','
($Data | Select-Object -Skip 1) -replace '\"|,' |
ConvertFrom-Csv -Header $Headers -Delimiter ";" |
Export-Csv -Path $CSVpath -Delimiter ";" -NoTypeInformation
# To trim superfluous ";" belonging to emty fields.
(Get-Content $CSVpath).TrimEnd(';') | Set-Content $CSVpath
注意:对于真正的 Csv 文件,没有必要删除结尾的 ;。它们是没有值的属性的自然表示。无论如何,根据请求,我添加了一些代码来删除它们。