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

FIFO
 2014-04-15 13:30
#174783 #174783
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Wie Muffi schon sagt: Schleifentyp.
Dir fällt vielleicht auf, dass Du in Deinem if-elsif eigentlich immer die gleichen Schritte ausführst. Ein Ansatz wäre da, die Suchmuster in einem Array zu hinterlegen, das ist übersichtlicher/wartbarer und einfach zu erweitern (ungetestet):

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
use strict;
use warnings;

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

my @knownTypes = qw(
    ONLINE
    RESYNC_IN_PROGRESS
    MISSING
    OUT_OF_SYNC
    OFFLINE
);

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

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

ZEILE:
while ( my $zeile = <$dataFH> ) {
    if ( $zeile =~ / \b OPTIMAL \b /x ) {
        exit 0;                 # <--- Wirklich Programm beenden?
        next ZEILE;             #      oder nächste Zeile?
    }

    if ( $zeile =~ /$typeRegExp/ ) {
        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";
        next ZEILE;
    }
    print "UNKNOWN\n";
}
close( $dataFH );


Das Beispiel verwendet auch lexikalische Filehandles (klare Empfehlung), außerdem habe ich die unnötigen /g-Modifier entfernt. btw: Wolltest Du beim ersten 'OPTIMAL' tatsächlich aus dem Programm aussteigen?
Ach ja, in Perl brauchst Du nicht immer printf(), einfaches print() geht auch und spart wertvolle Buchstaben ...
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