Duly noted. Thanks for the tip on perltidy. I'd never heard of that script before.
What I am looking for is to remove the duplicate part numbers and combine the tags (and add the quantities) similar to below:
413: quantity=2.0000 ,description=PRESS GAUGE ,tags=PI-412 PI-400 ,par
+tnum=2204133000 ,
414: quantity=2.0000 ,description=THERMOWELL ,tags= ,partnum=220226100
+0 ,
415: quantity=5.0000 ,description=THERMOMETER ,tags= TI-100 TI-101 TI-
+200 ,partnum=2201176000 ,
The original information is below:
413: partnum=2204133000,description=PRESS GAUGE,quantity=1.0000,tags=P
+I-412 ,
414: partnum=2202261000,description=THERMOWELL,quantity=2.0000,tags= ,
415: partnum=2201176000,description=THERMOMETER,quantity=2.0000,tags=
+,
576: partnum=2204133000,description=PRESS GAUGE,quantity=1.0000,tags=P
+I-400 ,
582: partnum=2201176000,description=THERMOMETER,quantity=3.0000,tags=T
+I-100 TI-101 TI-200
The code is below:
#!/usr/bin/perl
#
use strict;
use warnings;
my @tmp2 = (
"413: partnum=2204133000,description=PRESS GAUGE,quantity=1.0000,tags=
+PI-412",
"414: partnum=2202261000,description=THERMOWELL,quantity=2.0000,ta
+gs=",
"415: partnum=2201176000,description=THERMOMETER,quantity=2.0000,t
+ags=",
"576: partnum=2204133000,description=PRESS GAUGE,quantity=1.0000,tags=
+PI-400",
"582: partnum=2201176000,description=THERMOMETER,quantity=3.0000,tags=
+TI-100 TI-101 TI-200"
);
#
# Move the data into a hash %HoH
#
my $who = ();
my $field = ();
my %HoH = ();
my $rec = ();
my $key = ();
my $value = ();
foreach (@tmp2) {
s/^(.*?):\s*//;
$who = $1;
$rec = {};
$HoH{$who} = $rec;
for $field ( split(/,/) ) {
( $key, $value ) = split /=/, $field;
$rec->{$key} = $value;
}
}
print "\nHash complete\n";
##############################################
##
## Remove duplicate part numbers and combine the tags, if necessary.
##
##
print "######################################";
print "Duplicate Removal Testing\n";
my %tmpHoH = %HoH;
my $keyouter;
my $valueouter;
my $keydup;
my $valuedup;
my @keydelete = ();
while ( ( $keyouter, $valueouter ) = each %HoH ) {
while ( ( $keydup, $valuedup ) = each %tmpHoH ) {
if ( $keyouter eq $keydup ) {
next;
}
if ( $HoH{$keyouter}{partnum} eq $tmpHoH{$keydup}{partnum} ) {
print "**********\n";
print
"key: $keyouter, value: $HoH{$keyouter}{partnum}, tag= $HoH{$keyouter}
+{tags}\n";
print
"key: $keydup, value: $tmpHoH{$keydup}{partnum}, tag= $tmpHoH{$keydup}
+{tags}\n";
$HoH{$keyouter}{tags} =
$HoH{$keyouter}{tags} . " " . $tmpHoH{$keydup}{tags};
print "$tmpHoH{$keyouter}{tags}\n";
print "**********\n";
push( @keydelete, "$keyouter=>$keydup" );
}
}
}
print "######################################\n";
##############################################
#############################################
#
## Testing to see if the hash is working.
## Uncomment Section below to test.
my $iter = ();
my $iter2 = ();
for $iter ( keys %HoH ) {
print "$iter: ";
for $iter2 ( keys %{ $HoH{$iter} } ) {
print "$iter2=$HoH{$iter}{$iter2} ,";
}
print "\n";
}
|