Thread Logik Problem
(8 answers)
Opened by havi at 2008-06-24 14:15 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #!/usr/bin/perl use strict; use warnings; my $memory = { lastcode => '', code => '', number => '', name => '' }; while(my $entry = <DATA>) { chomp $entry; my ( $code, $number, $name ) = split /\|/, $entry; if ( $code eq '10' ) { $memory = { %$memory, code => $code, number => $number, name => $name, }; } else { if( $code eq '20' and $memory->{code} eq '10' ) { print join("|", map { $memory->{$_} } qw/code number name/) . " $entry\n" unless cmp_memory( $number, $name); } elsif ( $code eq '01' and $memory->{code} eq '10' && $memory->{lastcode} eq '20' ) { print "$entry\n" unless cmp_memory( $number, $name); } } $memory->{lastcode} = $code; } sub cmp_memory { my ( $number, $name ) = @_; return $number eq ( $memory->{number} || '' ) && $name eq ( $memory->{name} || '' ); } __DATA__ 01|1-123-878|Musterfrau 01|1-010-123|Muster 01|1-051-543|Mayer 20|2-123-452|Bauer 01|2-453-345|Huber 10|1-123-134|Max Mustermann 20|1-456-789|Peter Huber 01|1-457-123|Max Mayer |