in reply to (Ovid) Re: Regex to zero suppress
in thread Regex to zero suppress
Please take the following with a grain of salt. Ovid has already given the best answer.
It makes
me wince, now, but it was actually used in production
to strip leading zeros from numbers in a list, in the first
real Perl program I ever wrote.
#!/usr/bin/perl -w @numberarray = qw(00000900011 10001000100 00022200101); for $digits (@numberarray){ @temparray = split (//,$digits); $incr=0; while ($temparray[0] eq 0) { shift @temparray; $incr++; } unshift (@temparray," "x$incr); $digits = join('',@temparray); print "$digits\n"; }
I couldn't discover a better way than to shift out
the zeroes and unshift the replacing text, then
join the result together.
It isn't pretty, but, as far as I can tell, it doesn't break.
mkmcconn
novice
Update:
And now, a monk, I never would have posted this (wonderful what a few weeks at perlmonks can do), but if I had, I would have suggested to novice mkmcconn that even taken with a grain of salt, numerous difficulties in his solution could be avoided by writing it this way:
And then would have advised him (as a friend) of the topical difference between "Regex to zero suppress" and "Subroutine to remove zero-padding".#!/usr/bin/perl -wl use strict; my @numberarray = qw(000000 000002 001110 010201 010010 001000 0001 +20 010030); for (@numberarray){ next if $_ == 0; my @array = split //; my $incr = 0; while ($array[0] eq 0) { shift @array; $incr++; } unshift (@array,"\x20" x $incr); print @array; }
It will be interesting to find out what advice
I might give myself someday, about this update.
mkmcconn
|
|---|