Schrift
[thread]8981[/thread]

LogFile auslesen !

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2007-05-08 15:46
#76558 #76558
HI !
Und zwar möchte ich ein LogFile auslesen !
Die Datensätze sind durch Whitespace getrennt, es gibt auch leere Datensätz, die ebenfalls durch ein Whitspace getrennt sind. Ein Beispiel dazu:

Datum Uhrzeit Session ID1 ID2 Orderchannel Source
08.05.2007 09:09:57,712 8ftg6gttf54cfgh65-fe-345-fvtr-345 1256789 9874321 48 de.xxx.yyy.zzz
08.06.2007 09.10.55,712 de.xxx.yyy.zzz
09.07.20070:10:58,785 48 de.xxx.yyy.zzz

Habe dabei an die Funktion Split gedacht oder gibt es was besseres !!!

Vielen Dank für Eure Hilfe !!!
renee
 2007-05-08 15:53
#76559 #76559
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nö, split ist da schon sehr gut...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2007-05-08 19:49
#76560 #76560
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du musst nur aufpassen wenn du split() mit einem String als ersten Parameter aufrufst. Denn dann reagiert split() magisch bei z.B. nur whitespace im 1. Parameter und splittet den 2. Parameter anhand von soviel whitespace wie möglich.

Das kann man umgehen, indem man einen regulären Ausdruck als 1. Parameter übergibt:
Code: (dl )
split(/ /, $data);


MfG
bloonix
 2007-05-08 23:13
#76561 #76561
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=PerlProfi,08.05.2007, 17:49]
Code: (dl )
split(/ /, $data);
[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;
use Data::Dumper;

my @array;

while (my $line = <DATA>) {
@array = split(/ /, $line);
print Data::Dumper->Dump([\@array], [' split / /']);
@array = split(/\s+/, $line);
print Data::Dumper->Dump([\@array], [' split /\s+/']);
}

__END__
08.06.2007 09.10.55,712    de.xxx.yyy.zzz


$ split / / = [
'08.06.2007',
'09.10.55,712',
'',
'',
'',
'de.xxx.yyy.zzz
'
];
$ split /\s+/ = [
'08.06.2007',
'09.10.55,712',
'de.xxx.yyy.zzz'
];


Ich würde da schon eher /\s+/ bevorzugen.\n\n

<!--EDIT|opi|1178652102-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2007-05-09 00:33
#76562 #76562
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, dann geraten die Spalten durcheinander. Im ersten Datensatz sind weitere Spalten gefüllt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2007-05-09 17:09
#76563 #76563
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Deshalb ja mein Einwand. Mit split(' ', $data); würden die Spalten nämlich auch durcheinander geraten.
GwenDragon
 2007-05-10 12:45
#76564 #76564
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
[quote=Guest,08.05.2007, 13:46]Die Datensätze sind durch Whitespace getrennt, es gibt auch leere Datensätz, die ebenfalls durch ein Whitspace getrennt sind.[/quote]
Im Logfile ist wirklich durch Leerzeichen getrennt? Oder durch Tabs?
In Logfiles werden oft die Datensätze durch \t getrennt.
mr-sansibar
 2007-05-11 12:25
#76565 #76565
User since
2006-04-13
90 Artikel
BenutzerIn
[default_avatar]
[quote=GwenDragon,10.05.2007, 10:45][quote=Guest,08.05.2007, 13:46]Die Datensätze sind durch Whitespace getrennt, es gibt auch leere Datensätz, die ebenfalls durch ein Whitspace getrennt sind.[/quote]
Im Logfile ist wirklich durch Leerzeichen getrennt? Oder durch Tabs?
In Logfiles werden oft die Datensätze durch \t getrennt.[/quote]
Durch leer Zeichen !!!
Froschpopo
 2007-05-11 12:40
#76566 #76566
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Meine Log trennt cols nur mit tabs, wenn der linke col eine variable breite hat.
so nutze ich den bildschirmplatz optimal.

beispiel:
IP\tDatum\sMethode\t

Datum hat immer dasselbe Format, deshalb wird zwischen Datum und Methode kein Platz verschwendet wie bei tabs.

Ich geh sogar noch einen Schritt weiter und Trenne Methode vom nachfolgenden col auch nur mit einem leerzeichen weil die Alternative zu GET (Post) auch nur ein Zeichen mehr hat.
Das macht die Arbeit mit einem Parser etwas komplizierter, weil du das Log nicht nach Leerzeichen parsen solltest da im Datumgsformat auch Leerzeichen vorkommen.
Aber ich beobachte öfter mittels tail -F meine Requests und da bietet es sich an etwas Platz zu sparen bzw. Newlines im STDOUT zu vermeiden.\n\n

<!--EDIT|Froschpopo|1178872911-->
mr-sansibar
 2007-05-11 13:06
#76567 #76567
User since
2006-04-13
90 Artikel
BenutzerIn
[default_avatar]
[quote=Froschpopo,11.05.2007, 10:40]Meine Log trennt cols nur mit tabs, wenn der linke col eine variable breite hat.
so nutze ich den bildschirmplatz optimal.

beispiel:
IP\tDatum\sMethode\t

Datum hat immer dasselbe Format, deshalb wird zwischen Datum und Methode kein Platz verschwendet wie bei tabs.

Ich geh sogar noch einen Schritt weiter und Trenne Methode vom nachfolgenden col auch nur mit einem leerzeichen weil die Alternative zu GET (Post) auch nur ein Zeichen mehr hat.
Das macht die Arbeit mit einem Parser etwas komplizierter, weil du das Log nicht nach Leerzeichen parsen solltest da im Datumgsformat auch Leerzeichen vorkommen.
Aber ich beobachte öfter mittels tail -F meine Requests und da bietet es sich an etwas Platz zu sparen bzw. Newlines im STDOUT zu vermeiden.[/quote]
An der Struktur der Logfiles kann ich nichts machen. Es wird mir so vorgegeben. Das mit Datum Uhrzeit, da hast du Recht. Werde dann dann beim getrennten einlesen, sie wieder zusammenführen.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-05-08 15:46.