Dear all.

I have a tab delimited file as follow:

V       name    p
1.0     AAA     0.001
0.9     BBB     0.003
0.8     CCC     0.004
.....

I need to convert the file into following format:
{       labels =
        (
                {v="1.0"; name = "AAA"; p = "0.001"; },
                {v="0.9"; name = "BBB"; p = "0.003";},
                {v="0.8"; name = "CCC"; p = "0.004";}
        );
}

I have not been able to make the following code work yet and would like to
hear your suggestion for a better option.  The following is my thought at
this point.

print " {       labels =\n";
print "\t\t (\n";
open IN "tag.txt";
while (<IN>) {
        @line = split(/\t/);
        print "\t v=""@line[0]";";
        print "l=""@line[1]";";
        print " p= "@line[2]";";
        };

Thanks,

Aiguo

-----Original Message-----
From: Alden Meneses [mailto:[EMAIL PROTECTED] 
Sent: Monday, October 18, 2004 11:50 AM
To: [EMAIL PROTECTED]
Subject: Re: help on comparing lines in a text file


thanks GH

here is my updated code

use strict;
use warnings;

my $file = 'C:\Documents and Settings\menesea\My
Documents\alden712\ibd100\ibd100.txt';
open(IBDIN, "<$file") || die "cannot open $file $!"; while(<IBDIN>){
    my @array_a = split ' ', <IBDIN>;
    my @array_b = split ' ', <IBDIN>;
    compare_array();
}
close(IBDIN);

sub compare_array {
    my (%seen, @bonly);
    @[EMAIL PROTECTED] = (); # build lookup table
    foreach my $item (@array_b){
        push(@bonly, $item) unless exists $seen{$item};
    }
    print "@bonly \n";
}

I use komodo from activestate to help write my perl scripts. When I use the
while loop it complains about the @array_a and @array_b in the subroutine
thus I get a compile error when running.

can someone tell me what I am doing wrong?
TIA,
Alden

On Sat, 16 Oct 2004 22:34:59 +0200, Gunnar Hjalmarsson <[EMAIL PROTECTED]>
wrote:
> Alden Meneses wrote:
> > here is my updated code but it is not my loops are not set correctly 
> > as I get nothing when i print to screen.....
> >
> > open(IBDINA, "<$file") || die "cannot open $file $!"; open(IBDINB, 
> > "<$file") || die "cannot open $file $!"; chomp(@list_a=<IBDINA>);
> > chomp(@list_b=<IBDINB>);
> > for ($a = 0; $a < @list_a; $a+=2){
> >     @array_a=(split(/ /,$list_a[$a]));
> >     for ($b =1; $b < @list_b; $b+=2){
> >         @array_b=(split(/ /,$list_b[$b]));
> >         @[EMAIL PROTECTED] = (); # build lookup table
> >         foreach $item ($array_b){
> >             push(@bonly, $item) unless exists $seen{$item};
> >             print @bonly;
> >         }
> >     }
> > }
> >
> > close(IBDINA);
> > close(IBDINB);
> 
> Sorry to say it, but it looks terrible. ;-)
> 
> First and foremost, you are not using strictures and warnings. Posting 
> non-working code to a mailing list, without having had Perl perform 
> some basic checks, is bad, bad, bad.
> 
> Another thing is that you open two filehandles to the same file, and 
> unnecessarily complicates the assigning of the arrays. There is no 
> need for those outer loops.
> 
> This is a simplification of your code:
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> 
> my $file = '/path/to/file';
> 
> open IBDIN, "< $file" or die "cannot open $file $!";
> my @array_a = split ' ', <IBDIN>;
> my @array_b = split ' ', <IBDIN>;
> close IBDIN;
> 
> my (%seen, @bonly);
> @[EMAIL PROTECTED] = (); # build lookup table
> foreach my $item ($array_b){
>     push(@bonly, $item) unless exists $seen{$item};
>     print @bonly;
> }
> 
> __END__
> 
> Now, that code is not correct either. Actually, it doesn't even 
> compile since strictures are enabled, but just that fact illustrates 
> how using strict can help you detect a mistake.
> 
> Hopefully the above will help you move forward, and concentrate on the 
> comparison part of your program.
> 
> --
> 
> 
> Gunnar Hjalmarsson
> Email: http://www.gunnar.cc/cgi-bin/contact.pl
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED] 
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
>

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to