Schrift
[thread]11729[/thread]

Regular Expression



<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-04-30 19:47
#109048 #109048
Hallo zusammen,

ich habe folgendes Problem:

ich möchte aus einem LOG File mit einem Perl Skript nur bestimmte Werte rausziehen und diese Kommagtrennt abspeichern.

Die Datei habe ich zeilenweise in ein Array "@meineDaten" eingelsen.
Diese Zeilene sehen folgender Maßen aus:
[120280] CURRENT SERVICE STATE: COMPUTERNAME;check_memory;OK;HARD;1;Memory usage: total:458.19 Mb - used: 549.43 Mb (12%) - free: 3908.75 Mb (88%)

Nun möchte ich RECHNERNAME,Zahlenwert1,Zahlenwert2,Zahlenwert3, rausbekommen.

Habt ihr eine Idee?
mit meinem bisherigen Programm selektiere ich bereits die richtigen Zeilen aus, aber weiter komme ich nicht :(

Dieser Teil fehlt mir:
foreach (@meineDaten){
if($_ =~ UNGLAUBLICHES_REGEX_ZEUGS{
@RECHNERNAME[$i] =UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert1[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert2[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert3[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
$i++;
}
}



Danke im Voraus!
Grüße
gabe
pktm
 2008-04-30 21:44
#109049 #109049
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Na, also als Datenstruktur könntest du auch einen Hash verwenden, mit sprechenden Schlüsselnamen, aber das nur so als Idee.

Eventuell hilft dir das hier weiter (ungestestet):
Code: (dl )
1
2
3
4
5
use Data::Dumper qw/Dumper/;
foreach my $line ( @meineDaten ) {
my @felder = split(m/[\:\-\s\;]/, $line);
print Dumper(\@felder);
}


Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2008-05-01 14:46
#109068 #109068
Hi!

Danke schön!
dadurch habe ich zwar "nur" alle Teilstrings bekommen.... aber das hat mir auch gereicht.
Nun kann ich weiterproggen :)

Danke und Ciao
gabe
pktm
 2008-05-01 17:00
#109071 #109071
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-05-01 12:46:12--
Hi!

Danke schön!
dadurch habe ich zwar "nur" alle Teilstrings bekommen.... aber das hat mir auch gereicht.
Nun kann ich weiterproggen :)

Danke und Ciao
gabe


Gut. Bei Gelegenheit kannst du ja mal gucken, was da passiert, und eine matchende Regex draus amchen. Matchen kannst du mit runden Klammern.
ABer da gibt ne gute Manpagezu (perlre oder perlretut glaub ich).

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2008-05-02 15:47
#109102 #109102
Erm, die Regex matcht doch: m/foo/ heißt ja "match foo", wobei man das m in diesem Fall auch hätte weglassen können, du meintest sicherlich capturen:
Code (perl): (dl )
my ($ersteKlammer, $zweiteKlammer) = "ich bin ein string" =~ /^(\w+).+(\w+)$/;

Aber weshalb ich den Beitrag eigentlich verfasse ist das hier: (vom anderen Gast...)
Code (perl): (dl )
1
2
3
4
@RECHNERNAME[$i] =UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert1[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert2[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
@Zahlenwert3[$i]= UNGLAUBLICHES_REGEX_ZEUGS;

Das sollte man so schreiben:
Code (perl): (dl )
1
2
3
4
$RECHNERNAME[$i] =UNGLAUBLICHES_REGEX_ZEUGS;
$Zahlenwert1[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
$Zahlenwert2[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
$Zahlenwert3[$i]= UNGLAUBLICHES_REGEX_ZEUGS;
Denn du erhälst ja einen Skalar beim Zugriff auf ein Array. Diese Schreibeweise mit @Array[$index] beschreibt ein Array-Slicing. Der Code sollte zwar funktionieren, macht aber subtil was anderes als du eigentlich willst. Benutze einfach immer:
Code (perl): (dl )
1
2
use strict;
use warnings;
dann wirst du von perl auch höflich auf sowas hingewiesen:
Code: (dl )
Scalar value @foo[1] better written as $foo[1] at ...
<< >> 5 Einträge, 1 Seite



View all threads created 2008-04-30 19:47.