in reply to Re: Matching data against non-consecutive range
in thread Matching data against non-consecutive range
There is a small bug in the implementation, though: single number ranges fail. Add 618 or 619 to the test data, you get "618 isn't there!".
Here's a patch to fix it:
And here's another patch that disposes of pre-allocating the 1000 character string for $zones. I'm sure it's slower, but it'll work for an arbitrary range (ie, > 1000):# $last ||= 1; # needs to be $last ||= $first;
my $zones = reduce { my( $first, $last ) = split '-', $b; $last ||= $first; #allocate $a here $a .= chr(0) x ( $last ); substr( $a, $first, $last - $first + 1 ) = 'x' x ( $last - $first ++ 1 ); $a } '', split ',', '10-374,376-379,382-385,388-499,530-534,541-543,618,619,700-704,707-70 +9';
Update: added second patch
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Matching data against non-consecutive range
by BrowserUk (Patriarch) on Jan 27, 2005 at 22:32 UTC | |
by bmann (Priest) on Jan 27, 2005 at 22:36 UTC |