[英]how to change values in csv files using powershell
我有一个 csv 文件 sample.csv
#Period,Account,Entity,Year,Version,Currency,HSP_Rates,Scenario,Data
Apr,1,9,FY22,F,L,H,A,2
我想将年份值更改为 2022。我编写了一些代码,但没有提供我所需的输出
你的代码工作得很好。
Powershell 对以井号#
开头的 CSV 存在问题。 它将#
(当作为第一个字符出现时)解释为类型指示符。
如果您可以事先更改输入 CSV,请从#Period
中删除哈希,您的代码将按预期工作。
否则,您将需要通过在转换 CSV 之前删除哈希#
来解决该限制。
这意味着额外的步骤。 该过程将如下所示:
#period
的哈希值ConvertFrom-CSV
将结果字符串从 CSV 转换为 PSObjectConvertTo-CSV
获取新字符串#
符号这是一个修改后的示例,可以实现这一点
$csvRaw = Get-Content -Path 'D:\sample.csv' -Raw
$Csv = $CsvRaw.TrimStart('#') | ConvertFrom-Csv
$NewCsv = $csv | ForEach-Object {
[PsCustomObject]@{
Period = $_.Period
Account = $_.Account
Entity = $_.Entity
Year = "2022"
Version = $_.Version
Currency = $_.Currency
HSP_Rates = $_.HSP_Rates
Scenario = $_.Scenario
Data = $_.Data
} }
$OutCsv = ($NewCsv | ConvertTo-Csv -NoTypeInformation).TrimStart('"#')
# Converting back to CSV surround everything with double quotes.
# We need to insert back the hash sign for the #period header
$OutCsv[0] = """#" + $OutCsv[0]
$OutCsv | Out-File 'D:\sample_1.csv'
参考
Github 问题 - 如果 # 是标题的第一个字符,则 ConvertFrom-Csv 的行为很奇怪
Github 问题 - Import-Csv / ConvertFrom-Csv 将双引号哈希 (#) 误解为注释行的开头
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.