On Tue, Mar 8, 2016 at 10:09 AM, Fillmore <fillmore_rem...@hotmail.com> wrote: > For the record, here's a Perl script of mine I'm trying to port...there may > be 'malformed' lines in a TSV file I'm parsing that are better discarded > than fixed. > > my $ctr = 0; > OUTER: > while($line = <FILE>) { > > $ctr++; > if ($ctr < 5) {next;} > > my @allVals = split /\t/,$line; > > my $newline; > foreach my $i (0..$#allVals) { > > if ($i == 0) { > if ($allVals[0] =~ /[^[:print:]]/) {next OUTER;} > > $newline = $allVals[0]; > } > > if (defined $headers{$i}) { > > #if column not a number, skip line > if ($allVals[$i+1] !~ /^\d+$/) {next OUTER;} > > $newline .= "\t".$allVals[$i+1]; > } > } > print $newline."\n"; > > }
I'm not too fluent in Perl, but my understanding here is that "next OUTER" is equivalent to Python's 'continue' statement, right? So your flow control is roughly this: for _ in range(5): skip header row for line in file: for cell in split(line): if bad_cell_value: break # Skip out of the inner loop now else: print_stuff # We didn't break Does that look right? The key here is that a 'for' loop has an 'else' clause, which happens if there's no 'break' in the main loop. I think that's what you're after, here; you get to break out of "the loop and a little bit more", so to speak. The outer loop is actually immaterial here. ChrisA -- https://mail.python.org/mailman/listinfo/python-list