我的CSV文件有很多列。我需要转换几个列,例如,某些日期列的文本字符串为“Missing”,我想将“Missing”替换为空字符串等。
以下代码可能有效,但由于有很多列,因此它将是一个长文件。这是一种更好的写作方式吗?
Import-Csv $file |
select @(
@{l="xxx"; e={ ....}},
# repeat many times for each column....
) | export-Csv
答案 0 :(得分:3)
您可以使用命令式样式而不是流水线样式:
$records = Import-Csv $file
foreach ($record in $records)
{
if ($record.Date -eq 'Missing')
{
$record.Date = ''
}
}
$records | Export-Csv $file
编辑:要使用流水线样式,您可以这样做:
import-csv $file |
select -ExcludeProperty Name1,Name2 -Property *,@{n='Name1'; e={"..."}},@{n='Name2'; e={'...'}}
*
是一个匹配所有属性的通配符。我找不到以更好的方式格式化这段代码的方法,所以它看起来很难看。
答案 1 :(得分:0)
如果你想做的只是一个发现 - 替换,你真的不需要把它作为一个CSV来阅读。
你可以这样做:
Get-Content $file | %{$_.ToString().Replace("Missing", "")} | Out-File $file