PowerShell数据表删除空列逻辑不正确
这是我第一次编写一个可以调用自身的函数。我试图删除PowerShell数据表删除空列逻辑不正确,powershell,for-loop,Powershell,For Loop,这是我第一次编写一个可以调用自身的函数。我试图删除DataTable中行为空的所有列 代码工作正常,但会出现一些错误。出于这样或那样的原因,它最后一次在For循环中循环,旧的$列仍在内存中。虽然每次调用函数时我都会再次填充它。。。我不明白为什么 代码: Function Remove-EmptyColumns { $Columns = $DataTable.Columns.Count $Rows = $DataTable.Rows.Count for ($c =
DataTable
中行为空的所有列
代码工作正常,但会出现一些错误。出于这样或那样的原因,它最后一次在For
循环中循环,旧的$列仍在内存中。虽然每次调用函数时我都会再次填充它。。。我不明白为什么
代码:
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的字符串静态方法
if ([string]::IsNullOrEmpty($DataTable.Rows[$r].Item($c).ToString()))
{ ... }
这消除了值可能不等于“”但改为$Null的问题,并在一行中完成该操作。我认为是这样,但它不起作用。删除一列后,其他列的ID号将发生更改。您编辑的建议很好,谢谢。我不得不将其更改为$columnsToRemove+=$DataTable.Columns[$c]
,因为默认情况下它是一个普通的数组
,而不是数组列表
。这个变通方法很棒!谢谢你,我应该自己考虑一下PNo令人担忧,工作完美!谢谢你的帮助,我盯着自己看不见:PGORD思考,我应该考虑更多地使用你的建议。我从来没有这样做,实际上是因为它看起来如此非PowerShell原生,如果这是一个字:D谢谢你的提醒!