Hannes: Array of Array / Union

Beitrag lesen

Hi,

ich hab folgenes File:

NR 1;Zeitstempel A;Type A, Groesse 1
NR 2;Zeitstempel B;Type B, Groesse 2
NR 3;Zeitstempel B;Type C, Groesse 3
NR 1;Zeitstempel C;Type A, Groesse 1
NR 2;Zeitstempel A;Type A, Groesse 2
NR 3;Zeitstempel X;Type A, Groesse 3
NR 1;Zeitstempel B;Type A, Groesse 4
NR 2;Zeitstempel A;Type B, Groesse 1
...

Nun muss ich es irgendwie hinbekommen, das ich doppelte Einträge rausfiltere.
Und zwar wenn NR und Type identisch sind, dann muss die Grösse verglichen werden und es soll dann die "doppelte" Zeile mit der kleineren Grösse rausfliegen.
Ich hoffe das ist soweit verständlich?!

Meine Idee war ein AoA, also hab ich mal so angefangen:

while (<>)  
        {  
        chomp;  
        push @AoA, [ split(/;/,$_) ];  
        }  
  
for my $i ( 0 .. $#AoA )  
{  
        for my $j ($i .. $#AoA )  
        {  
                if ($i == $j) {next;}  
                if ($AoA[$i][0] eq $AoA[$j][0])  
                {  
                        if ($AoA[$i][2] eq $AoA[$j][2])  
                        {  
                                if ($AoA[$i][3] eq $AoA[$j][3])  
                                {  
                                        print "Nr i = $i / Nr j = $j - $AoA[$j][0] / $AoA[$j][2] / $AoA[$j][3] are equal\n";  
                                        #delete $AoA[$j];  
                                        #$AoA[$j][0]=undef;  
                                        push @{ $AoA_new[$i] }, $AoA[$i][0], $AoA[$i][2], $AoA[$i][3];  
                                }  
                                else  
                                {  
                                        if ( $AoA[$j][3] > $AoA[$i][3])  
                                        {  
                                                $AoA[$i][3]=$AoA[$j][3];  
                                                #$AoA[$j][0]=undef;  
                                                push @{ $AoA_new[$i] }, $AoA[$i][0], $AoA[$i][2], $AoA[$i][3];  
                                        }  
                                        else  
                                        {  
                                                #$AoA[$j][0]=undef;  
                                                push @{ $AoA_new[$i] }, $AoA[$i][0], $AoA[$i][2], $AoA[$i][3];  
                                        }  
                                        print "NOT EQAL - Nr i = $i / Nr j = $j - $AoA[$j][0] / $AoA[$j][2] / $AoA[$j][3] = $AoA[$i][3] NOT equal\n";  
                                        #delete $AoA[$j];  
                                }  
                        }  
                }  
        }  
}

Jedoch hab ich so natürlich wieder doppelte Einträge in $AoA_new, da ich ja nicht $AoA[$j] lösche bzw. wenn ich es mache mit delete, dann kommt die Fehlermeldung "Use of uninitialized value in concatenation (.) or string at".

Jemand eine Idee, wie ich das machen kann?
Danke.

ciao,
Hannes