从嵌套for循环继续

时间:2014-10-16 11:17:34

标签: loops powershell

我有以下循环结构:

while ($reader.Read() -eq $true)
{
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++)
    {
        if(something...)
        {
            #continue with while
        }
    }
    #do more stuff...          
}

现在,有没有办法在for循环内继续使用外部while循环的下一次迭代而没有任何中断变量?因此,如果“某事是真的”我不想去#do more stuff而是去做下一个$reader.read()Continue仅进入for循环的下一次迭代。 Break只会破坏for循环。

2 个答案:

答案 0 :(得分:7)

将内循环分解为函数可以提高可读性,具体取决于变量的混乱程度。

function processRow($reader) {
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++)
    {
        if(-not something...) { return $null }
        # process row
    }
    $row
}

while ($reader.Read()) {
    $row = processRow $reader
    if ($row) {
        #do more stuff...          
    }
}

但如果您想直接执行此操作,则可以,因为PowerShell标记了中断:

:nextRow while ($reader.Read()) {
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++) {
        if(something...) {
            #continue with while
            continue nextRow
        }
    }
    #do more stuff...          
}

答案 1 :(得分:0)

编辑:修改后的,递归的(和未经测试的!)解决方案,以便您的耕作可能会有所不同:

function doReader()
{
    while ($reader.Read() -eq $true)
    {
        $row = @{}
        for ($i = 0; $i -lt $reader.FieldCount; $i++)
        {
            if(something...)
            {
                #continue with while
                doReader
                break;
            }
        }
    }
}
doReader
#do more stuff