将CSV中的空字段替换为0

时间:2015-07-09 04:41:05

标签: csv powershell

我正在尝试使用PowerShell将某个列中的空值替换为0。

我有以这种格式的CSV:

test   test2    test3    test4
----   -----    -----    -----
blah   fsds       4      45645
bla1   fsds1             45645
blah2  fsds2      4      34322
blah3  fsds3      4      67544
blah4  fsds4             3432432

所以我想通过“test3”中的空值并替换为0。

我有这个,但它不起作用:

$inFilePath = "G:\powershell\excel\test.csv"
$csvColumnNames = (Get-Content $inFilePath | Select-Object -First 1).Split(",")

foreach ($row in $inFilePath) {
    if ($row.test3 -eq $null) {
        $row.test3 = 0
        Write-Host "updating value in excel"
    }
}

$csvColumnNames | Export-Csv  "G:\powershell\excel\replaced2.csv" -NoTypeInformation

2 个答案:

答案 0 :(得分:1)

你与foreach和if一起走在正确的轨道上。试试这个:

foreach($row in $inFilePath)
{
    if (-not $row.test3)
    {
      $row.test3= 0
    }

}

获取列标题:

$inFilePath | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name

答案 1 :(得分:1)

使用Import-Csv进行阅读,使用Export-Csv进行CSV文件编写。

$inFilePath  = "G:\powershell\excel\test.csv"
$outFilePath = "G:\powershell\excel\replaced2.csv"

Import-Csv $inFilePath | % {
  if (-not $_.test3) { $_.test3 = 0 }
  $_   # echo all records, so they can be exported back to a file
} | Export-Csv $outFilePath -NoType