Thread Hausnummern parsen (29 answers)
Opened by jan99 at 2014-09-02 08:05

GwenDragon
 2014-09-02 12:01
#177067 #177067
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
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
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

sub even { return $_[0] % 2 == 0 }

sub hausnummer_liste {
    my $nummer = shift;
    my @liste;

    # Nummern sind ; getrennt
    $nummer =~ /;/
      and @liste = split( /;/, $nummer )
      and return @liste;
    
    # Nummern sind 1-42 oder 1-1f
    if ( my ( $von, $vona, $nach, $nacha )
        = $nummer =~ /^(\d+)([a-z])?-(\d+)([a-z])?$/i )
    {
        if ( $vona || $nacha ) {
            push @liste,$von if not $vona; # Nummer ohne Suffix auch merken
            push @liste, "$von$_"
              for ( ( $vona || 'a' ) .. ( $nacha || 'z' ) ); # Suffixreihe erzeugen
            return @liste;
        }
        else {
            # gerade Nummern
            even($von)
              and even($_)
              and push @liste, $_
              for ( $von .. $nach );

            # ungerade Nummern
            !even($von)
              and !even($_)
              and push @liste, $_
              for ( $von .. $nach );

            return @liste;
        }
    }
    else {
        return $nummer;
    }

}

say for hausnummer_liste('1;3;99');
say "";
say for hausnummer_liste('1a-1e');
say "";
say for hausnummer_liste('1-7');
say "";
say for hausnummer_liste('2-11');
say "";
say for hausnummer_liste('11a;12;13-1');
say "";
say for hausnummer_liste('42');


ergibt:
1
3
99

1
1a
1b
1c
1d
1e

1
3
5
7

2
4
6
8
10

11a
12
13-1

42


//EDIT: garantiert gibt es Perl-Code der noch viel kürzer ist aber schwerer nachvollziehbar ;)
Aber hier sollen Leute auch lernen können und nicht Perl-Golf spielen.
EDIT2: vergessene Anfangszahl einer Reihe falls ohne Suffix
Last edited: 2014-09-02 12:32:41 +0200 (CEST)

View full thread Hausnummern parsen