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


|