Larry Sandwick wrote: > > I have a problem with hashes and trying to understand them, I have read > the perldoc intersection and looked into the Perl Cookbook, and still do > not understand how I should handle this problem.
perldoc perldata > I have a master file with part number and quantity in it. I also have a > file that has the same information in it, part number and quantity. Both > files are comma, delimited. > > What I am trying to do is read in the Master file, and then read in the > second file. Compare the second file to the Master file and decrement > the quantity in Master file. Then print out the results > > Example Master file: > 1011-303, 3 > 1021-329, 2 > 1021-333, 1 > 1021-336, 1 > 1021-340, 2 > 1021-323, 1 > 1021-330, 1 > 1021-334, 1 > 1021-341, 2 > > Example Data file > 1011-303, 2 > 1021-329, 2 > 1021-333, 1 > 1021-336, 2 > 1021-340, 1 > 1021-323, 1 > 1021-330, 1 > 1021-334, 1 > 1021-341, 1 > 2044-666, 1 > > Code follows .. You will see that I am missing the code in the foreach . > if that is what I need to use > <snip> > > $fname = $ARGV[0] || "scanned.file"; > > open(Master, "master.file") || die ("Could not open file $!"); > > my %master_file = <Master>; > close(Master); > > open(DATA, $fname ) || die ("Could not open file $!"); > my $count=0; > > # open my hash > foreach $item ( $fname ) > { > # > # subratract the information in HasH % master_file > # > } > > # print results > open(NewMasterList,">>Results.file") || die ("Could not write file $!"); > > close (DATA); > close (NewMasterList); > exit; > > Any help would be greatly appreciated !!! I would read the data file first and then modify the master file: my $fname = shift || 'scanned.file'; open DATA, $fname or die "Could not open $fname: $!"; my %data = map /^([^,]+),\s*(\d+)/, <DATA> close DATA; open Master, 'master.file' or die "Could not open master.file: $!"; open NewMasterList, '>>Results.file' or die "Could not write Results.file: $!"; while ( <Master> ) { # assumes that you want to preserve the spacing my ( $key, $space, $val ) = /^([^,]+),(\s*)(\d+)/; if ( exists $data{ $key } ) { $_ = "$key,$space" . $val - $data{ $key } . "\n"; } # print results print NewMasterList; } close Master; close NewMasterList; exit 0; __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]