我正在使用下面的代码导入和导出到 CSV。我进行导出的原因是因为我需要导出的 CSV 中的所有列都用双引号引起来。但在下面的代码中,双引号仅出现在每行的第一行和最后一行。
Import-Csv c:\Emp.csv | Export-Csv c:\Emp1.csv -NoTypeInformation -Force
Run Code Online (Sandbox Code Playgroud)
请注意,我已经尝试过下面的代码(可以工作,但如果 CSV 的大小 > 200MB,则需要更长的时间):
$inform = Get-Content C:\A.csv
$inform | % {
$info = $_.ToString().Replace("|", """|""")
$info += """"
$var = """" + $info
$var | Out-File D:\B.csv -Append
}
Run Code Online (Sandbox Code Playgroud)
输入示例(CSV 文件):
1|A|测试|ABC、PQR
示例输出(CSV 文件):
“1”|“A”|“测试”|“ABC,PQR”
Export-Csv已经在每个字段本身添加了双引号,因此您需要做的就是指示它使用正确的分隔符:
Import-Csv 'C:\path\to\input.csv' -Delimiter '|' |
Export-Csv 'C:\path\to\output.csv' -Delimiter '|' -NoType
Run Code Online (Sandbox Code Playgroud)
但是,Export-Csv会不加区别地在所有字段周围添加引号,因此如果您想有选择地在特定字段周围添加引号,您将需要一个自定义例程:
$reader = New-Object IO.StreamReader 'C:\path\to\input.csv'
$writer = New-Object IO.StreamWriter 'C:\path\to\output.csv'
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine().Split('|')
for ($i=0; $i -lt $line.Count; $i++) {
if ($line[$i] -like '*,*') {
$line[$i] = '"{0}"' -f $line[$i]
}
}
$writer.WriteLine(($line -join '|'))
}
$reader.Close(); $reader.Dispose()
$writer.Close(); $writer.Dispose()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4940 次 |
| 最近记录: |