我有一个.csv文件,我想将它导入powershell,然后遍历文件更改某些值。然后我希望输出附加到原始.csv文件,以便更新值。
我的问题是.csv文件包含的标题并不是唯一的,并且无法更改,因为它不会在另一个程序中运行。最初我在powershell中定义了自己的头文件以解决这个问题,但是当输出文件需要旧头文件时,它会有这些新头文件。
我也尝试了ConvertFrom-Csv
,这意味着我无法再访问我需要的列,因此会出现大量的运行时错误。
最理想的是能够使用已定义的列标题然后转换回原始列标题。我目前的代码如下:
$csvfile = Import-Csv C:\test.csv| Where-Object {$_.'3' -eq $classID} | ConvertFrom-Csv
foreach($record in $csvfile){
*do something*}
$csvfile | Export-Csv -path C:\test.csv -NoTypeInformation -Append
我现在已经在网上搜索了几个小时,并尝试了我遇到过的所有内容,但都无济于事。 提前谢谢。
答案 0 :(得分:0)
这是一种有点愚蠢的实施,但应该有效。
CSV是逗号分隔文件,您不必将其视为结构化数据。随意拼接和骰子。
答案 1 :(得分:0)
由于您事先知道输入CSV文件中有多少列,因此您可以在内部导入而不使用标题和进程。例如:
$columns = 78
Import-Csv "inputfile.csv" -Header (0..$($columns - 1)) | Select-Object -Skip 1 | ForEach-Object {
$row = $_
$outputObject = New-Object PSObject
0..$($columns- 1) | ForEach-Object {
$outputObject | Add-Member NoteProperty "Col$_" $row.$_
}
$outputObject
} | Export-Csv "outputfile.csv" -NoTypeInformation
此示例生成新的PSObject,然后输出具有通用列名称(Col0,Col1等)的新CSV文件。