Re: hash

[email protected] (Bobby)
Newsgroups perl.beginners
Message-ID <[email protected]>
Here's a better excerpt of the script, see my comment towards the bottom. Thanks. 

#!/usr/local/bin/perl

use strict;
open(IN, $ARGV[0]) || die "Could not open data file: $ARGV[0]\n";

my %US;
my %EURO;
my %ITAL;
my %GENERAL;

my $DEBUG = 0;

# map each store to its children stores
while (<IN>)
{
    chomp;
    my $line = $_;
    # split rows into columns
    my @fields = split /\|/, $line;
    
    if($DEBUG) {
        print "$line\n";
        print "SKU:".$fields[0]."\n";
        print "  item_size ".$fields[19]."\n";
        print "  standard_size ".$fields[36]."\n";
        print "  us_sizes ".$fields[37]."\n";
        print "  us_sizes ".$fields[38]."\n";
    }

    # make sure base number field is numeric
    if($fields[0] =~ /^[0-9]{5}/) {
        # save the important fields
        my $sku = $fields[0];
        my $item_size = $fields[19];
        my $standard_size = $fields[36];
        my $size_type = $fields[37];
        my $us_sizes  = $fields[38];
                
        next if($item_size eq ""); #if item size is note specified, skip it.

        # push each store into array associated with its parent store
        if($size_type eq "") {
            $US{$item_size} = 1;
        }
        elsif($size_type eq "Euro") {
            $EURO{$standard_size} = 1;
            $EURO{$sku} => $sku;
        }
        elsif($size_type eq "Italian") {
            $ITAL{$standard_size} = 1;
        }
        elsif($size_type eq "General") {
            $GENERAL{$standard_size} = 1;
        }
        
        if($us_sizes ne "") {
            $us_sizes =~ s/^,?(.*),?$/\1/g;
            foreach my $size (split /,/, $us_sizes) {
                #print "pushing found US size $size\n";
                $US{$size} = 1;
            }
                                
        }
    }

}
close(IN);


printSizesXML();

sub xmlEscape
{
    # STP: Change made to the Ampersand section, to &amp; 
    my ($str) = @_;
    $str =~ s/\&/\&amp;/g;
    $str =~ s/</\&lt;/g;
    $str =~ s/>/\&gt;/g;
        
    #remove weird Unicode character
    $str =~ s/\x10/ /g;
    
    return $str;
}

sub in
{
    my ($val, @list) = @_;
    return (grep( /^$val$/, @list));
}

sub printSizesXML
{
    my $level = 3;
    my $spacer = " ";


    my $n = 1;
    foreach my $size ( sort keys %US )
    {
        next if($size !~ /^[0-9.]+$/);
        $size = xmlEscape($size);
        $n++
    }
    
    my $n = 1;
    
    foreach my $size ( keys %EURO )
    {
        next if($size !~ /^[0-9.]+$/);
        $size = xmlEscape($size);
        
        print "$size|Euro\n";

    

    #This is where i'm stuck
    #I need to be able to print the  $us_sizes from $fields[38] 
    #in the while loop above down in this foreach statement.
    # The commented out code below is my failed attempt. Need some help here     #foreach my $sizeb ( sort keys %US ){
    #    if ($US{$sku} = $EURO{$sku}){
    #    print "$size Euro - $sizeb US\n";
    #    }
    # }
        $n++
    }

    




Rodrick Brown <[email protected]> wrote: On Thu, May 22, 2008 at 12:39 PM, Bobby  wrote:
> Hi all,
>
> I have a flat file that contains a pid, us_size and euro_size. I want to create read in the file and create one hash for the us_size (%US) and the other for the euro_size (%EURO). Then i want to do a print statement if the pid value in the us_size hash is equal to pid value in the euro_size hash...maybe IF ($US{$pid} = $EURO{$pid}) {print statement...}.
>
> The part where i'm stuck on is how to assign the data into a hash and do the comparison, could one of you help me with the Perl's syntax or point in the right direction?
>
> Thanks much!
>
>
> pid|us_size|euro_size
> 1|10|34
> 2|11|35
> 3|12|37
> 4|13|
>
>
>

Why do you need a hash?

[svcprd@nycplx01a ~]$ cat /tmp/out
1|10|34
2|11|35
3|12|37
4|13|13

[svcprd@nycplx01a ~]$ perl -nle '($pid,$u,$e) = split/\|/,$_; print
"PID: $pid US: $u EU: $e" if ($u =~ m/$e/)'  /tmp/out
PID: 4 US: 13 EU: 13

--
[ Rodrick R. Brown ]

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.