PowerShell DataTable删除空列逻辑不正确

时间:2015-03-11 12:19:19

标签: powershell for-loop

这是我第一次编写可以调用自身的函数。我试图删除行为空的DataTable的所有列。

代码工作正常,但吐出一些错误。由于某种原因,它最后一次循环通过for循环,旧的$Columns号码仍在内存中。虽然我每次调用这个函数时都会再填充它...但我不明白为什么......

代码:

 Function Remove-EmptyColumns {
    $Columns = $DataTable.Columns.Count
    $Rows    = $DataTable.Rows.Count

    for ($c = 0; $c -lt $Columns; $c++) {    
        $Empty = 0       
        for ($r = 0; $r -lt $Rows; $r++) {
            if ($DataTable.Rows[$r].Item($c).ToString() -eq '') {
                $Empty++
            }
        }
        if ($Empty -eq $Rows) {
            $DataTable.Columns.Remove($DataTable.Columns[$c])
            Remove-EmptyColumns
        }
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

为什么它是递归方法?尝试删除Remove-EmptyColumns,它应该可以工作,不是吗?

编辑:尝试

Function Remove-EmptyColumns {
    $Columns = $DataTable.Columns.Count
    $Rows    = $DataTable.Rows.Count

    $columnsToRemove = @()

    for ($c = 0; $c -lt $Columns; $c++) {    
        $Empty = 0       
        for ($r = 0; $r -lt $Rows; $r++) {
            if ($DataTable.Rows[$r].Item($c).ToString() -eq '') {
                $Empty++
            }
        }
        if ($Empty -eq $Rows) {
            $columnsToRemove.Add($DataTable.Columns[$c])
        }
    }

    $columnsToRemove | ForEach-Object { 
            $DataTable.Columns.Remove($_) }
}

答案 1 :(得分:1)

只是一个想法,但我喜欢使用IsNullOrEmpty的String静态方法。

if ([string]::IsNullOrEmpty($DataTable.Rows[$r].Item($c).ToString()))
{ ... }

这可以消除价值可能不相等的问题''但要改为$ Null,它只能在一行中完成。