Thread Programmierungshilfe für PERL (9 answers)
Opened by asakalli at 2010-07-16 13:32

asakalli
 2010-07-17 17:57
#139871 #139871
User since
2010-07-16
5 Artikel
BenutzerIn
[default_avatar]
@topec,
vielen vielen Dank. Genau, du hast es richtig Verstanden. Es kann mal verschiedene Jobs in gleichen Node vorkommen. Aber gleiche Job kann sehr sehr selten auf mehrere Node vorkommen.
Der letzte Skript von dir ist genau was ich mir vorstelle. ICh habe ihn eingebaut und laufen gelassen. Er spukt mir folgende Fehler aus

Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 33, <$fh> line 2.
Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 35, <$fh> line 2.
Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 37, <$fh> line 2.
Use of uninitialized value in hash element at ./perlscript_for.pl line 39, <$fh> line 2.
Use of uninitialized value in hash element at ./perlscript_for.pl line 39, <$fh> line 2.
$VAR1 = {
'' => {
'' => undef
}
};


ich habe folgendes das Skript ein wenig geändert.
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
 use strict;
use warnings;
# das Modul Data::Dumper laden
# exportiert die Funktion "Dumper"
use Data::Dumper;

# Verzeichnis in dem gesucht werden soll
my $dir='/ver1/ver2/ver3/ver4/ver5/ver6/ver7/node*'; #in 7. Verzeichniss gibt es 80 Verzeichnisse die folgendes heißen node001 bis node040, und node101 bis node140 

# Jobs zu den Nodes in einem Hash speichern
my %node;

# alle Dateien im Verzeihnis durch gehen
for my $file (glob("$dir\/messages")) # in jedem node Verzeichnis gibt es eine Messages datei. und genau diese Datei soll gelesen werden. Ich hoffe dass ich hier so richtig gemacht habe. 
{
  # Datei öffnen und prüfen ob es funktioniert hat
  if(open(my $fh, '<', $file))
  {
    # Datei Zeilenweise durch gehen
    while(my $line=<$fh>)
    {
      chomp($line);
      ## Wenn eine Zeile "node" mit einer Nummer und Job mit einer Nummer zusammen mit "exeeds" auftaucht,
      ## Dann die NodeID und JobID zusammen mit der Meldung speichern.
      #$node{$1}{$2}=$3 if($line=~/node(\d+).*?job (\d+) exceeds (.+)$/);
      # das kann man auch anders schreiben:
      if(index('exceed',$line)>-1)
      {
        # zeile an den "|" spliten
        my @col=split('|', $line);
        # nodeid ermitteln
        my ($nodeid)=$col[2]=~/(\d+)/;
        # jobid ermitteln
        my ($jobid)=$col[4]=~/job\s*(\d+)/;
        # message ermitteln
        my ($message)=$col[4]=~/exceeds (.+)$/;
        # alles zusammen speichern
        $node{$nodeid}{$jobid}=$message;
      }
    }
    # Datei schließen
    close($fh);
  }
  else
  {
    # waren wenn das Öffnen der Datei fehlschlug
    warn("ERROR open $file ($!)\n");
  }
}

# Mit Dumper kann man Datenstrukturen formatiert ausgeben lassen.
# das ist ganz nützlich um zu sehen was man überhaupt an Daten hat.
print Dumper(\%node);


Noch mal tausend Dank für deine Hilfe.

View full thread Programmierungshilfe für PERL