Hi experts,help!!

I am reading data from a text file and storing the data in an array of hashes and hash 
of hashes.I dont know how and where I need to pass the reference into the array and 
hash and dereference it.

The purpose of the code is to read data by column names and compare each record with a 
record from another text file.Could someone help me .Thank you. Naveen

I am sorry about the amount,style  of code I am enclosing.

 

 

# File to do the compare

sub compare {
    
    my ($record_type,$raima_file,$db2_file) =@_;

    print "raima file :$raima_file\n";

    # my $raima_file =  "raima_profile.txt";
    # my $db2_file = "db2profile.txt";

    my @db2array;
    my %hashb_outer;
    my %hasha_outer;
    
    open (RAIMA,$raima_file)
 or die "Cannot open file $raima_file\n";
    

    print "Comparing raima and db2 profile files\n";
    
    while( my $raimadata = <RAIMA>) {

 my @line_a;
 my %hash_a;
 
 chop $raimadata;
 $raimadata =~ s/\"//g;
 
 @line_a = split(/\|/,$raimadata);
      
 my @raimafields = &get_raima_field_names($record_type);
 
 
     while (@raimafields){
  
  my $raimafieldname = shift @raimafields;
 # print "raima field name is $raimafieldname \n";
  $hash_a{$raimafieldname} = shift @line_a;
 # print "raima hash value is  $hash_a{$raimafieldname} \n";
  
                #push(@raimaarray,\%hash_a);
  
     } #end while of raimafields

 my $raimaid = "profile"." ".$hash_a{"profile_user_id"}." ".$hash_a{"profile_country"};
 $hasha_outer{$raimaid} = \%hash_a;
 
    }
    
    open (DB2,$db2_file)
 or die "Cannot open file $db2_file\n";

     while( my $db2data = <DB2>) {
  
  my @line_b;
  my %hash_b;
  chop $db2data;
  $db2data =~ s/\"//g;
  @line_b = split(/\|/,$db2data);
  my @db2fields = &get_db2_field_names($record_type);
  
  while (@db2fields){
      
      my $db2fieldname = shift @db2fields;
       #     print "db2 field name is $db2fieldname \n";
      $hash_b{$db2fieldname}= shift @line_b;
#      print "db2 hash value is  $hash_b{$db2fieldname} \n";
     
    
      
  }
     
  my $db2id = "profile"." ".$hash_b{"profile_user_id"}." ".$hash_b{"profile_country"};
 
  $hashb_outer{$db2id} = \%hash_b;
  
     }
    &printRecDiffs(\@db2array,\%hasha_outer,$record_type);
    

} #end of compare


sub printRecDiffs {


 my ($db2array,$hashRaima,$record_type) =@_;
 
 my %ignored_fields = &get_ignored_fields($record_type);
 
 my %char_fields = &get_char_fields($record_type);
 

  
 for $i (0..$#{$db2array})
 {
     
     my %db2hash1 = %{$$db2array[$i]};
     my $id;
     
   #  if($record_type eq "profile"){
  
  $id= "profile"." ".$db2hash1{"profile_user_id"}." ".$db2hash1{"profile_country"};
  
 # print "inside profile id value is $id\n";
    # }
     
    # print "check after char fields \n";
         
     if (exists $$hashRaima{$id})
     {
  
  my %raimahash = %{$$hashRaima{$id}};
         
  
  
  foreach $db2key (keys %db2hash1)
  {
      #     print "the value for the key $db2key is $db2hash1{$db2key}\n";
      
      if ($ignored_fields{$db2key}) 
      {
   print "ignored fieldname is $db2key :$ignored_fields{$db2key}\n";
   next;
      }
      if ($char_fields{$db2key}) {
   
   print "char field name is $db2key :$char_fields{$db2key} \n";
   $raimahash{$db2key} = chr($raimahash{$db2key});
   
      }

      if( $db2hash1{$db2key} ne $raimahash{$db2key})
      {
   # print the differences
   if($db2hash1{$db2key} =~ /[+-]?\d+\.?\d*$/ )
   {
       if($db2hash1{$db2key} != $raimahash{$db2key})
       {
    print "numeric \n";
    print "the key is $db2key\n";
    print " db2 value is $db2hash1{$db2key}\n";
    print " raima value is $raimahash{$db2key}\n";
       }
   }
   else
   {
       print "the key is $db2key\n";
       print " db2 value is $db2hash1{$db2key}\n";
       print " raima value is $raimahash{$db2key}\n";
   }
   
      } #if
      
  } #foreach
  
  
     } #if
     else {
  print "The record doesnt exist in Raima\n";
     }
     
 } #for
 
}

end of code


 

 



---------------------------------
Do you Yahoo!?
Y! Web Hosting - Let the expert host your web site

Reply via email to