Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Perl Beginners > Re: Properly di...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 3 of 6 Topic 10985 of 11531
Post > Topic >>

Re: Properly displaying items from hash

by noreply@[EMAIL PROTECTED] (Gunnar Hjalmarsson) Apr 24, 2008 at 01:51 PM

icarus wrote:
> I have two files: log_ca.txt and log_aa.txt
> contents of log_ca.txt:
> 
> 333333333->ca_filename3
> 444444444->ca_filename4
> 111111111->ca_filename1
> 222222222->ca_filename2
> 
> contents of log_aa.txt:
> 
> 111111111->aa_filename1
> 333333333->aa_filename3
> 222222222->aa_filename2
> 444444444->aa_filename4
> 
> The program extracts the values after the -> delimiter of both files
> Makes an association between the values on both of the files.
> 
> Meaning, this is desired output:
> 
> CA FILENAME => AA_FILENAME
> ---------------------------
> ca_filename1 => aa_filename1
> ca_filename2 => aa_filename2
> ca_filename3 => aa_filename3
> ca_filename4 => aa_filename4

Suggested code:

     print "CA FILENAME => AA_FILENAME\n";
     print '-' x 27, "\n";

     open my $ca, '<', 'log_ca.txt' or die $!;
     my %ca;
     while ( <$ca> ) {
         chomp;
         my ($k, $v) = split /->/;
         $ca{$k} = $v;
     }

     open my $aa, '<', 'log_aa.txt' or die $!;
     foreach ( sort <$aa> ) {
         chomp;
         my ($k, $v) = split /->/;
         print "$ca{$k} => $v\n";
     }

> Outputs I'm getting
> (see "double pop" in code below for details)
> 
> CA FILENAME => AA_FILENAME
> ---------------------------
>  =>
> ca_filename3 => aa_filename3
> ca_filename4 => aa_filename4
> 
> and
> 
> (after adding the "double pop" below prints all records but still get
> the => delimiter)
> CA FILENAME => AA_FILENAME
> ---------------------------
>  =>
> ca_filename1 => aa_filename1
> ca_filename2 => aa_filename2
> ca_filename3 => aa_filename3
> ca_filename4 => aa_filename4
> 
> 
> Questions:
> How do I get the desired output without resorting to the 'double pop'?

See suggested change below.

> How do I get rid of the extra "=>"?

That is also taken care of if you change those lines as suggested.

<snip>

> foreach(@[EMAIL PROTECTED]
){
> 	s/[\r\t\n]+//; #Remove carriage returns and new lines
> 	my @[EMAIL PROTECTED]
 = split (/\d+->/, $_);
> 	push @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 does not do what you think it does. Check the contents of @[EMAIL PROTECTED]
 to 
see what I mean.

You probably want to replace the two latest lines with:

	my ($temp) = /\d+->(.+)/;
	push @[EMAIL PROTECTED]
 $temp;

> foreach(@[EMAIL PROTECTED]
){
> 	s/[\r\t\n]+//; #Remove carriage returns and new lines
> 	my @[EMAIL PROTECTED]
 = split (/\d+->/, $_);
> 	push @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
> #why do I need to put pop@[EMAIL PROTECTED]
 twice?

Because @[EMAIL PROTECTED]
 and @[EMAIL PROTECTED]
 contain empty elements.

-- 
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl
 




 6 Posts in Topic:
Properly displaying items from hash
rsarpi@[EMAIL PROTECTED]   2008-04-23 18:35:29 
Re: Properly displaying items from hash
peng.kyo@[EMAIL PROTECTED  2008-04-24 19:09:13 
Re: Properly displaying items from hash
noreply@[EMAIL PROTECTED]  2008-04-24 13:51:16 
Re: Properly displaying items from hash
krahnj@[EMAIL PROTECTED]   2008-04-24 05:12:57 
Re: Properly displaying items from hash
Uri Guttman <uri@[EMAI  2008-04-25 18:12:23 
Re: Properly displaying items from hash
rsarpi@[EMAIL PROTECTED]   2008-04-24 12:17:26 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri Jul 25 19:04:37 CDT 2008.