Thread String einlesen und nachfolgendes Wort ausgeben (20 answers)
Opened by SCORRPiO at 2014-04-15 10:15

FIFO
 2014-04-15 14:46
#174789 #174789
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2014-04-15T12:38:03 SCORRPiO
Jedoch müsste ich es etwas erweitern da ich je nach fall einen anderen Exit-code ausgeben muss (Online=0 RESYNC_IN_PROGRESS=1 MISSING/OUT_OF_SYNC/OFFLINE=2)


Wo soll der exit-code denn hin(führen)?
Du musst überlegen, wie Du auf das Vorkommen von RESYNC_IN_PROGRESS etc. reagieren willst: Schleife beenden? Programm beenden?
Wenn das aufwendiger wird, lohnt sich vielleicht ein Dispatcher.

Edit: Hier eine Version, die mit passendem exit-code aussteigt, sobald eine Zeile mit Reizwort auftritt:
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
use strict;
use warnings;

my $status = 3;                 # Wenn kein Status dann 3 (UNKNOWN)

my %exitCodes = (
    OPTIMAL             => 0,
    RESYNC_IN_PROGRESS => 1,
    MISSING             => 2,
    OUT_OF_SYNC         => 2,
    ONLINE              => undef,
    OFFLINE             => undef,
);

my $typeRegExp = join( '|', keys %exitCodes );
$typeRegExp = qr/ \b $typeRegExp \b /x;     # RegExp nur einmal kompilieren

open( my $dataFH, '<', 'test4' ) or die "Datei  nicht gefunden\n";

while ( my $zeile = <$dataFH> ) {
    if ( $zeile =~ /($typeRegExp)/ ) {
        if ( defined $exitCodes{$1} ) {
            exit $exitCodes{$1};
        }
        my ($phy)   = $zeile =~ / \b phy   \s+ (\w+) /x;
        my ($state) = $zeile =~ / \b state \s+ (\w+) /x;
        my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x;
        print "phy: $phy, state: $state, flags: $flags\n";
    }
    else {
        print "UNKNOWN\n";
    }
}
close( $dataFH );

Last edited: 2014-04-15 14:55:58 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread String einlesen und nachfolgendes Wort ausgeben