in reply to Re: Filling in missing values in an array
in thread Filling in missing values in an array

Marshall:

I was toying with splice and made an amusing variation:

#!/usr/bin/perl -w use strict; my $data = '4 NULL NULL NULL 5 1 NULL NULL 2 NULL 6'; my @data = split(/\s+/,$data); my $iFirstNULL; my $cur_index=0; foreach (@data) { if (my $num = /NULL/.../\d/) { $iFirstNULL = $cur_index if $num == 1; splice @data, $iFirstNULL, $cur_index-$iFirstNULL, newVals(@data[$iFirstNULL-1 .. $cur_index]) if $num =~ /EO/; } $cur_index++; } print "@data\n"; #prints 4 4 4.5 5 5 1 1 2 2 4 6 sub newVals { my ($leftVal, $rightVal, $num) = ($_[0], $_[-1], scalar(@_)-2); # Left half of the return list is $leftVal, right half is $rightVa +l my @ret = (($leftVal) x int($num/2), ($rightVal) x int($num/2)); # Insert the average in the center for an odd-sized number of null +s splice @ret, int($num/2), 0, ($leftVal+$rightVal)/2 if $num&1; return @ret; }

...roboticus

When your only tool is a hammer, all problems look like your thumb.