Thread Textstring richtig zerlegen? (12 answers)
Opened by kami at 2012-06-12 12:07

Linuxer
 2012-06-12 17:36
#158918 #158918
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hier ein Vorschlag:

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


# Jeder logische Teil (Tag, Stunde, Minute) ist optional;
# daher mit nicht-einfangender Klammer gruppiert und mit
# Modifier ? versehen
my $regex = qr{
(?:                 # Gruppierung, weil optional
    (\d+)\s+Tage    # Anzahl Tage einfangen; 1. Rueckgabewert
)?
\s*
(?:                 # Gruppierung, weil optional
    (\d+)\s+Std\.   # Anzahl Stunden einfangen; 2. Rueckgabewert
)?
\s*
(?:                 # Gruppierung, weil optional
    (\d+)\s+Min.    # Anzahl Minuten einfangen; 3. Rueckgabewert
)?
}x;


while ( my $line = <DATA> ) {

    my ( $d, $h, $m ) = $line =~ m{$regex};

    for ( $d, $h, $m ) {
        $_ = 0  if !defined $_;
    }

    print "$d D, $h h, $m m\n";
}

__DATA__
3 Tage 12 Std. 3 Min.
2 Std. 4 Min.
2 Min.
~


Resultat:
Code: (dl )
1
2
3
4
3 D, 12 h, 3 m
0 D, 2 h, 4 m
0 D, 0 h, 2 m
0 D, 0 h, 0 m


Scheint mir Deiner Anforderung recht nahe zu kommen ;-)
Wichtig ist hier, dass die Reihenfolge der einzelnen Werte immer gleich bleibt.
D.h. Tage stehen vor Stunden, die vor Minuten stehen.
Wenn die Reihenfolge auch noch variiert, braucht es eine andere Variation.
Last edited: 2012-06-12 17:46:03 +0200 (CEST)
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!

View full thread Textstring richtig zerlegen?