所以我正在尝试查看CSV中的列名,将它们写入数组,然后将数据吐回到带有新列的新CSV中。只要我可以在标题中添加一列,我真的不关心当前数据表是什么样的。这似乎是一个相当基本的事情,但我似乎无法找到任何人都这样做的情况。例如:
"Name","Location","Phone"
"John Smith","Toronto","555.555.5555"
"Jane Doe","Dallas","555.555.5554"
我只想保留名称,位置和电话列名称,并将它们放入另一个带有一个额外列的CSV中。实际上,捕获的是更多列,它们并不总是相同,因此脚本需要能够与列名无关。我应该能够使用任意数量的具有不同名称的列来提供任何CSV,并且能够获得仅具有列名称的输出文件。我已经尝试了至少十几种不同的方法来做到这一点并不断遇到不同的问题。
示例:
$validatedfilepath = "validfile.csv"
$csvData = New-Object PSObject
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
$csvdata = $csvdata | get-member -Name * -MemberType NoteProperty
$csvData = @($csvData.Name)
$csvData
这将显示我在新的validfile中需要的列名的确切列表,但我不知道如何将其作为列名导出到CSV中。每次我尝试执行export-csv时,它会为每个或其他一些愚蠢的东西给我一个新行的字符长度计数。
由于
答案 0 :(得分:1)
Export-CSV
从输入对象的成员中读取列名。所以你已经走上正轨了,你只需简化一下,就像这样:
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
# You can now modify/enrich/filter the data somehow, for example like $csvdata[0].ID = 56387, then just export it:
$csvData | Export-CSV -NoTypeInformation -Path "newfile.csv"
您所犯的错误是使用$csvdata
结果覆盖Get-Member
中的导入数据。然后用@($csvData.Name)
表达式再次覆盖它。