我使用Set-Content
替换CSV文件中的标题,它会替换标题,但它也会清除标题下方的所有数据行。
有没有办法对代码进行编码,以便在更换标题后我不会丢失数据?
$Location = "$home\performance2.csv"
$PreformHeaderRow1 =@()
$PreformHeaderRow2 =@{}
$PreformHeaderRow1 = (Get-Content $Location | Select-Object
-First 1).Split(",")
$PreformHeaderRow1 | % {
$PreformHeaderRow2.Add($_ -replace '"',"" )
}
$NewHeaders =@()
ForEach($objectA in $HeaderLookup.Keys){
ForEach($objectB in $PreformHeaderRow2.Keys){
if($objectA -eq $objectB){
$NewHeaders+= $HeaderLookup[$objectA]
}
}
}
[string]$a = $NULL
$a = $NewHeaders -join ""","""
$a | Set-Content -First 1 $Location
答案 0 :(得分:0)
Set-Content
没有像-First
这样的Get-Content
个参数,它只是用Value
参数的内容覆盖文件,就像你传递的所有内容一样这是所有文件更新的第一行。
您可以按索引$content[0]
选择第一行,在使用$content[0] = $NewHeaders -join '","'
之前仅替换其值Set-Content
:
$Location = "$home\performance2.csv"
$PreformHeaderRow1 =@()
$PreformHeaderRow2 =@{}
$content = Get-Content $Location
$PreformHeaderRow1 = $content[0].Split(",")
$PreformHeaderRow1 | % {
$PreformHeaderRow2.Add($_ -replace '"',"" )
}
$NewHeaders =@()
ForEach($objectA in $HeaderLookup.Keys){
ForEach($objectB in $PreformHeaderRow2.Keys){
if($objectA -eq $objectB){
$NewHeaders+= $HeaderLookup[$objectA]
}
}
}
$content[0] = $NewHeaders -join '","'
$content | Set-Content $Location
答案 1 :(得分:0)
如果您只想在其上方添加固定内容的行,则可以执行以下操作:
$output = "C:\temp\t.csv"
$Content = Get-Content $output
$add_above_all_else = 'header1;header2;header3;header4;header5'
Set-Content $output -value $add_above_all_else,$content
这样可以保留所有行,但只需在固定标题上方添加一行。