Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Continue while from nested for-loop

I have the following loop structure:

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

Now, is there any way to continue from within the for loop with the next iteration of the outer while loop without any break-variable? So if "something is true" I do not want to go #do more stuff but instead do the next $reader.read(). Continue only goes to the next iteration of the for loop. Break will only break the for loop.

like image 949
silent Avatar asked Oct 16 '14 11:10

silent


1 Answers

Factoring out the inner loop to a function could improve readability, depending on how tangled up your variables are.

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...          
    }
}

But if you want to do this directly, you can, because PowerShell has labeled breaks:

:nextRow while ($reader.Read()) {
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++) {
        if(something...) {
            #continue with while
            continue nextRow
        }
    }
    #do more stuff...          
}
like image 115
Jeroen Mostert Avatar answered Oct 15 '22 14:10

Jeroen Mostert