Perl Datensätze richtig aussortieren?

Flockyflo

Lieutenant
Registriert
Okt. 2008
Beiträge
977
Hi, ich hab hier ein kleines Problem:

Code:
my $logfile = [blablablub unwichtig :) ]
my @mystat;
my $oncnt = 0;
my $offcnt = 0;
my $nacnt = 0;

open LOGFILE, '<', $logfile or die "Kann Datei $logfile nicht zum Schreiben oeffnen: $!\n";

@mystat = <LOGFILE>;
foreach (@mystat)
{
chomp(@mystat);  
if ($_ = 'online')
{
	$oncnt++;
}
if ($_ = "offline")
{
	$offcnt++;
}
if ($_ = "undefinierbare Zuweisung:")
{
	$nacnt++;
}
}

print "$oncnt Computer sind online\n";
print "$offcnt Computer sind offline\n";
print "$nacnt undefinierbare Zuweisungen\n";

close LOGFILE;

So, was will ich machen:
In dem Logfile stehen IP Adressen und daneben der Status des jeweiligen Computers
Bsp.: 127.0.0.1 -- online
Ich will es jetzt so auslesen können, das der Counter pro Zeile in der on oder off steht, sich 1 erhöht und am Ende das Ergebnis ausgegeben wird.
Das Problem ist, das mein Skript derzeit alle Zeilen zusammen zählt (derzeit 13 Zeilen) und am Ende zurück gibt, das es 13 PCs sind die an, aus und undefinierbar sind.

Das andere Problem:
Wenn ich $_ = nehme, meckert er herum, das ich lieber $_ == nehmen sollte. Wenn ich das mache, meckert er das die Wörter hinter dem == nicht nummerisch sind (was verständlich ist).
Ich denke mal das hier der Fehler liegt, jedoch weiss ich leider keine Lösung für mein Problem :(
Vll kann mir ja einer von euch weiterhelfen, wäre super. Danke ;)
 
Das chomp auf die Liste macht irgendwie keinen Sinn ^^
Um alphanumerische Werte zu vergleichen gibts den Operator eq.

Versuchs mal so:
(Allerdings müssten die Schlüsselwörter online, offline usw. so je in einer separaten Zeile des Logs stehen, sonst musste zum vergleichen nen Regex nutzen. Evtl, machen da auch die Zeilenumbrüche probleme. Dann musst du Chomp am Anfang der Schleife auf $_ aufrufen.)
foreach (@mystat)
{
chomp $_;
if ($bla eq "online")
{
$oncnt++;
}
if ($bla eq "offline")
{
$offcnt++;
}
if ($bla eq "undefinierbare Zuweisung:")
{
$nacnt++;
}
}

MFG
 
Zuletzt bearbeitet:
Haha, Dankeschön, es funktioniert :)

Jetzt muss ich halt das Logfile umschreiben und es sieht nicht mehr so schön aufgeräumt aus, aber immerhin funktioniert es endlich, Danke nochmal :)
 
Wie gesagt, du kannst auch checken ob das Wort in der Zeile enthalten ist. Allerdings eben nicht mit eq. Stichwort: Reguläre Ausdrücke.

Ansonsten: Bitte.
 

Ähnliche Themen

Zurück
Oben