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

SCORRPiO
 2014-04-15 10:15
#174771 #174771
User since
2014-02-18
13 Artikel
BenutzerIn

user image
Hallo zusammen,

ich schreibe gerade an einen Programm welches aus einer text Datei folgende zeile einliest:
Code: (dl )
ioc0 phy 0 scsi_id 1 HITACHI  HUS153014VLS300  A598, 136 GB, state ONLINE, flags OUT_OF_SYNC

oder
Code: (dl )
ioc0 phy 2 scsi_id 1 HITACHI ST3300657SS-H A598, 136 GB, state ONLINE, flags OUT_OF_SYNC


und nun möchte ich das er mit folgendes ausgibt

Quote
phy: 0, size: 136 GB, state: ONLINE, flags: OUT_OF_SYNC


habe bereits mit EDIT: my $ausgabe mit $ausgabe getauscht!!
Code (perl): (dl )
1
2
3
4
5
6
7
if($zeile =~ m/OUT_OF_SYNC/g){
                        $ausgabe=$zeile;
                        my ($phy) = $ausgabe =~ /phy\s(\w.+)/; 
                        my ($state) = $ausgabe =~ /state\s(\w.+)/;
                        my ($flags) = $ausgabe =~ /flags\s(\w.+)/;
                        printf "phy: $phy, state: $state, flags: $flags";
}

versuch es zu realisieren jedoch bekomme ich keine ausgebe.

In Sache regex blicke ich noch nicht ganz durch. Ich hoffe es ist damit realisierbar.

Ich nutze Perl v5.14.2

Danke schonmal
Gruß
SCORRPiO

EDIT 2: Den Ganzen Code:
more (17.5kb):

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use strict;
use warnings;
# Messages
# ********
my $message_ok = "OK";
my $message_warning = "WARNING";
my $message_critical = "CRITICAL";
my $message_unknown = "UNKNOWN"; 
# Exit Status
# ***********
my $exit_ok = "0";
my $exit_warning = "1";
my $exit_critical = "2";
my $exit_unknown = "3";
# other Variable
# ***********
my $status = 3;                 # Wenn kein Status dann 3 (UNKNOWN)
#~ my @werte=`/usr/sbin/mpt-status`;
my @werte = `cat test4`;        #test ausgabe
my $zeile="";                           #aktuelle Zeile fürs einlesen
my $ausgabe;                            #Zeile für die Ausgabe
# Programmierung
# ********
foreach $zeile (@werte){
        if($zeile =~ m/OPTIMAL/g){
                        exit "0";
                        }
        if($zeile =~ m/ONLINE/g){
                        exit "0";
                        }
        
        if($zeile =~ m/RESYNC_IN_PROGRESS/g){
                        $ausgabe=$zeile;
                        my $phy = $ausgabe =~ /phy\s(\w.+)/; 
                        my $state = $ausgabe =~ /state\s\s(\w.+)/;
                        my $flags = $ausgabe =~ /flags\s\s(\w.+)/;
                        printf "phy: $phy, state: $state, flags: $flags ....RESYNC\n";
                        exit "1";
                        }
        else{
         if($zeile =~ m/MISSING/g){
                        $ausgabe=$zeile;
                        
                        my $phy = $ausgabe =~ /phy\s(\w.+)/; 
                        my $state = $ausgabe =~ /state\s\s(\w.+)/;
                        my $flags = $ausgabe =~ /flags\s\s(\w.+)/;
                        printf "phy: $phy, state: $state, flags: $flags ....MISS\n";
                        exit "2";
                        }
                        
         else{
                        if($zeile =~ m/OUT_OF_SYNC/g){
                        $ausgabe=$zeile;
                        
                        my $phy = $ausgabe =~ /phy\s \s([\w.]+)/;
                        my $state = $ausgabe =~ /state\s \s([\w.]+)/;
                        my $flags = $ausgabe =~ /flags\s \s([\w.]+)/;

                        printf "phy: $phy, state: $state, flags: $flags ...OUT\n";
                        exit "2";
                        }
                        
        else{
         if($zeile =~ m/OFFLINE/g){
                        $ausgabe=$zeile;
                        
                        my $phy = $ausgabe =~ /phy\s \s([\w.]+)/;
                        my $state = $ausgabe =~ /state\s \s([\w.]+)/;
                        my $flags = $ausgabe =~ /flags\s \s([\w.]+)/;
                        printf "phy: $phy, state: $state, flags: $flags ....Offline\n";

                        exit "2";
                        }
                }}}

}

Last edited: 2014-04-15 11:05:19 +0200 (CEST)
Linux User || Perl 5.14

View full thread String einlesen und nachfolgendes Wort ausgeben