Schrift
[thread]12073[/thread]

Logik Problem

Leser: 1


<< >> 9 Einträge, 1 Seite
havi
 2008-06-24 14:15
#111418 #111418
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
wenn Code 10 - Name + Nummer merken
nachfolgend kommt Code 20 - mit anderem Namen + Nummer = Fehler / Ausgabe Code 10 + Name + Nummer und
Ausgabe Code 20 + anderem Namen + Nummer
nachfolgend kommt Code 01 - mit wieder anderem Namen + Nummer / Ausgabe Code 01 + wieder anderem Namen Nummer
(Fehlerausgabe Name + Nummer+ Code)

01|1-123-878|Musterfrau
01|1-010-123|Muster
01|1-051-543|Mayer
20|2-123-452|Bauer
01|2-123-452|Bauer
10|1-123-134|Max Mustermann
20|1-456-789|Peter Huber
01|1-457-123|Max Mayer

die letzten 3 muessten ausgegeben werden
Ausgabe sollte so aussehen - 10|1-123-134|Max Mustermann---20|1-456-789|Peter Huber---01|1-457-123|Max Mayer

Danke schon mal!

Liebe Gruesse,
havi
esskar
 2008-06-24 14:32
#111420 #111420
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was ist wenn nach der 10 nochmal ne 10 oder ne 11 kommt oder direkt ne 01 kommt?
Ronnie
 2008-06-24 14:36
#111421 #111421
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
geht bestimmt noch etwas eleganter - vor allem bei den Regexen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

my $text = join '', (<DATA>);
my @match = $text =~ /^10.*\r?\n20.*\r?\n01.*$/mg;
s/\r?\n/---/g and print for @match;

__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
havi
 2008-06-24 14:37
#111422 #111422
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
esskar+2008-06-24 12:32:10--
was ist wenn nach der 10 nochmal ne 10 oder ne 11 kommt oder direkt ne 01 kommt?


Habs oben jetzt geändert...

20|2-123-452|Bauer
01|2-123-452|Bauer

so etwas soll nicht ausgegeben werden...

nur bei unterschiedliche Nummer!
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
havi
 2008-06-24 14:48
#111425 #111425
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
PERFEKT!!!!!!!!!!!!!!!!!!!!!!!

VIELEN DANK!
havi
 2008-06-24 15:04
#111430 #111430
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
OK - doch nicht ganz perfekt - mein Fehler!

die Reihenfolge kann auch wechseln, d.h. es kommt Code 10 - als nächstes
wieder Code 10 - als nächstes Code 20 - und dann Code 01
dann ist jeweils der Name+Nummer+Code auszugeben
havi
 2008-06-24 15:19
#111431 #111431
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
War viell. nicht ordentlich erklaert...

Ich versuchs nochmal:

Wenn Code ungleich 01 ist und die naechste Nummer ungleich der davor ist,
dann soll ausgegeben werden.

Beispiele:
20|2-114-560|Mayer
01|2-114-560|Mayer
KEINE AUSGABE

01|2-010-708|Huber
01|2-011-044|Bauer
KEINE AUSGABE

10|2-147-169|Mayer
20|2-147-554|Bauer
01|2-147-695|Huber
AUSGABE

10|2-147-169|Mayer
20|2-147-554|Bauer
30|2-148-554|Muster
01|2-147-695|Huber
AUSGABE
Linuxer
 2008-06-24 20:51
#111471 #111471
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Also sowas?
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
52
53
54
55
56
57
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

#http://board.perl-community.de/thread/12073/#MSG7

#> global variables
#> ----------------------------------------------------------------------------

my $last_num = undef;

#> main script
#> ----------------------------------------------------------------------------

while ( my $line = <DATA> ) {

    chomp $line;

    if ( $line =~ m{^\s*$} ) {

        print "--8<--\n";
        next;
    }

    my ( $code, $num, $name ) = split /\|/, $line;

    if ( defined $last_num ) {

        if ( $code ne '01' and $num ne $last_num ) {

            printf "%s|%s|%s\n", $code, $num, $name;
        }
    }

    $last_num = $num;

}

#> sub routines
#> ----------------------------------------------------------------------------

__DATA__
20|2-114-560|Mayer
01|2-114-560|Mayer

01|2-010-708|Huber
01|2-011-044|Bauer

10|2-147-169|Mayer
20|2-147-554|Bauer
01|2-147-695|Huber

10|2-147-169|Mayer
20|2-147-554|Bauer
30|2-148-554|Muster
01|2-147-695|Huber
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< >> 9 Einträge, 1 Seite



View all threads created 2008-06-24 14:15.