|
From: Gene on 5 May 2008 20:54 On May 5, 8:08 pm, Paul Herber <SubstituteMyFirstNameH...(a)pherber.com> wrote: > On Mon, 5 May 2008 16:04:53 -0700 (PDT), Gene <gene.ress...(a)gmail.com> > wrote: > > > > > > >On May 5, 5:43 am, Paul Herber <SubstituteMyFirstNameH...(a)pherber.com> > >wrote: > >> On Sun, 4 May 2008 20:10:09 -0700 (PDT), Gene <gene.ress...(a)gmail.com> > >> wrote: > > >> >On Apr 29, 8:09 am, Paul Herber > >> ><SubstituteMyFirstNameH...(a)pherber.com> wrote: > >> >> On Tue, 29 Apr 2008 03:55:09 -0700 (PDT), xyz > > >> >> <lavanyaredd...(a)gmail.com> wrote: > >> >> >I have a string > >> >> >16:23:18.659343 131.188.37.230.22 131.188.37.59.1398 tcp 168 > > >> >> >for example lets say for the above string > >> >> >16:23:18.659343 -- time > >> >> >131.188.37.230 -- srcaddress > >> >> >22 --srcport > >> >> >131.188.37.59 --destaddress > >> >> >1398 --destport > >> >> >tcp --protocol > >> >> >168 --size > >> >> >i need to split this string such that i need to get all these > >> >> >parameters....the filed widths are not fixed...some time i have 4/3 > >> >> >digits srcport > > >> >> Can you not split on the spaces? Whatever programming language you are > >> >> using may even have a split function. > > >> >Indeed. You have to love perl for stuff like this: > > >> >use strict; > >> >use Data::Dumper; > > >> >sub parse { > >> > my $s = shift; > >> > my $d = '\d+'; > >> > my ($time, $srcaddr, $srcport, $dstaddr, $dstport, $protocol, $size) > >> >= > >> > $s =~ /($d:$d:$d\.$d) \s+ > >> > ($d\.$d\.$d\.$d)\.($d) \s+ > >> > ($d\.$d\.$d\.$d)\.($d) \s+ > >> > (\S+) \s+ > >> > ($d)/x; > > >> > { time => $time, > >> > srcaddr => $srcaddr, srcport => $srcport, > >> > dstaddr => $dstaddr, dstport => $dstport, > >> > protocol => $protocol, size => $size } > >> >} > > >> >sub main { > >> > my $str = '16:23:18.659343 131.188.37.230.22 131.188.37.59.1398 tcp > >> >168'; > >> > my $result = parse($str); > >> > print Dumper($result); > >> >} > > >> >main; > > >> well, I was thinking more along the lines of > >> <?php > >> $input = '16:23:18.659343 131.188.37.230.22 131.188.37.59.1398 tcp > >> 168'; > >> list ($time, $src, $dest, $protocol, $size) = split(" ", $input); > >> ?> > > >> Splitting the port from the address is left as an exercise for the > >> reader. > > >Thanks. > > >I've written maybe 100,000 lines of perl to do stuff like this. In > >the long run you are better off with a custom regex that matches the > >line. It's better for input error format detection and it self- > >documents the input format. > > Fair enough, but your code will break with IPv6 Precisely.
First
|
Prev
|
Pages: 1 2 Prev: Record stack back traces efficiently on space Next: Linked List confusion |