PowerShell DataTable 删除空列逻辑不正确
PowerShell DataTable removing empty columns logic incorrect
这是我第一次编写可以调用自身的函数。我正在尝试删除行为空的 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
}
}
}
感谢您的帮助。
为什么是递归方法?尝试删除 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($_) }
}
只是一个想法,但我喜欢使用 IsNullOrEmpty 的 String 静态方法。
if ([string]::IsNullOrEmpty($DataTable.Rows[$r].Item($c).ToString()))
{ ... }
这消除了值可能不等于 '' 而是 $Null 的问题,并且它在一行中完成。
这是我第一次编写可以调用自身的函数。我正在尝试删除行为空的 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
}
}
}
感谢您的帮助。
为什么是递归方法?尝试删除 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($_) }
}
只是一个想法,但我喜欢使用 IsNullOrEmpty 的 String 静态方法。
if ([string]::IsNullOrEmpty($DataTable.Rows[$r].Item($c).ToString()))
{ ... }
这消除了值可能不等于 '' 而是 $Null 的问题,并且它在一行中完成。