On Mon, Jun 30, 2003 at 08:52:32PM +0200, B. Fongo wrote:
> Hi
>
> I have a file containing arrays of numbers. I 'm trying to get a
> subroutine iterate the file and print ONLY arrays with three elements
> into a second file. None of the elements has more than 2 digits. So I
> tried with a pattern match, it fails to deliver the right result.
It would be helpful if you told us in what way it failed. I suspect you
got lines with three or more numbers.
> I want it to find and print array with 3 elements like:
>
> 1 2 5
> 20 33 45
> 5 17 25
>
>
>
> sub get_arr{
>
> open (OUTPUT, "permed.dat") || die "Could not open file. $! \n";
> open (INPUT, ">cleaned_up.dat") || die "Could not open file. $!\n";
You have a funny idea about input and output ;-)
> my ($clean, @clean, $cleanprint, $arrlength, $result);
> $clean = <OUTPUT>;
> while ( $clean ){
>
> @clean = split (" ", $clean);
> print INPUT ("@clean") if (@clean =~ /\d+\s+\d+\s+\d+/);
I suspect that should be /^\d+\s+\d+\s+\d+$/
possibly allowing spaces at either end.
> $clean = <OUTPUT>;
>
> }
>
> die ("Could not close output file. $! \n") unless close
> (OUTPUT);
> die ("Could not close input file. $! \n") unless close (INPUT);
> }
But I would code that as:
perl -ane 'print if @F == 3' permed.dat > cleaned_up.dat
--
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]