in reply to How to check missing sequence between sequence range ?
If I understand what you're asking, you want to detect gaps in the sequence if you've only skipped one number; you don't care about gaps of 2 or more, like the one between 0005 and 9996.
So for each number you know exists (call it 'n'), if n+2 (with "wraparound" after 9999 back to 0001) exists but n+1 does not, that's a "skip":
my @skips = get_skips(qw(9996 9998 9999 0001 0003 0005)); print join(',', sort @skips) . "\n"; # 0002,0004,9997 sub next_seq { my $n = shift() + 1; if ($n > 9999) { $n = 1; } return sprintf '%04d', $n; } sub get_skips { my %s = map { $_, 1 } @_; my @r; for (keys %s) { my $next = next_seq($_); my $nextnext = next_seq($next); if (exists($s{$nextnext}) && ! exists($s{$next})) { push @r, $next; } } return @r; }
I'll leave extracting the list of numbers from the filenames to you.
|
|---|