Thread Logik Problem (8 answers)
Opened by havi at 2008-06-24 14:15

esskar
 2008-06-24 14:46
#111424 #111424
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
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

View full thread Logik Problem