Thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln (12 answers)
Opened by mixxer at 2019-08-22 22:28

mixxer
 2019-08-24 01:45
#190394 #190394
User since
2016-04-01
25 Artikel
BenutzerIn
[default_avatar]
Ich hab letztendlich zu 95 % den Vorschalg von haj übernommen, weil der doch so ziemlich alles erschlägt, was irgendwie falsch laufen kann bei der Eingabe && doch die guten ins Töpfchen liest && ich den Code jetzt zu mindestens 80% verstehe.

Ich markiere mal gelöst und vielen Dank nochmal an Alle!

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
#!/usr/bin/perl
use strict;
use warnings;

my $text = '  ,,,  1,3,  , ,5-7,,0011,0015-19-22,A12q,ü,,  -  ,';
print join ",", @{ &_text_to_list($text) };

sub _text_to_list
  #
{
    my $string = shift;
    my ( @list, %hash );
    $string =~ s/\s+//g;
    @list = split( ',', $string );
    @list = map {                    #
        /^(\d+)-(\d+)$/ ? ( $1 .. $2 ) :    #
          /^0*(\d+)$/   ? ($1) :            #
          ()
    } @list;
    %hash = map  { $_ => 1 } @list;
    @list = sort { $a <=> $b } keys %hash;
    return \@list;
}

Update: mit anonymem Hash:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub _text_to_list
  #
{
    my $string = shift;
    my @list;
    $string =~ s/\s+//g;
    @list = split( ',', $string );
    @list = map {                    #
        /^(\d+)-(\d+)$/ ? ( $1 .. $2 ) :    #
          /^0*(\d+)$/   ? ($1) :            #
          ()
    } @list;
    # anonHash anstatt realHash:
    @list = sort { $a <=> $b } keys %{ { map { $_ => $_ } @list } };
    return \@list;
}

Update2: Anonyme Listen auch noch dazu. Nach meinem Geschmack jedoch viel schlechter zu lesen...
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub _text_to_list
  #
{
    my $string = shift;
    $string =~ s/\s+//g;
    return \@{
        [
            sort { $a <=> $b } keys %{
                {
                    map { $_ => $_ }
                      map { /^(\d+)-(\d+)$/ ? ( $1 .. $2 ) : /^0*(\d+)$/ ? ($1) : () }
                      split( ',', $string )
                }
            }
        ]
    };
}

Last edited: 2019-08-24 15:18:11 +0200 (CEST)

View full thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln