Extracting information from a file of records
Archive - Originally posted on "The Horse's Mouth" - 2008-01-16 14:23:22 - Graham EllisHere's a very common application ...
You file a file of data records, and you want to parse the file handing the data record by record. Each record has a series of space delimited fields, most of which are no interest to you what so ever ...
And a template for a solution in Perl.
open (FH,--put file name here in quote--) or --handle error--
while ($report = <FH>) {
# Using list slices of anonymous lists to extract data
# $report = ("192.168.200.67 e-w-f graham mac 2005 17 Tiger mucky");
($cpuname,$yop) = (split(/\s+/,$report))[1,4];
print "$yop - $cpuname\n"; }
I dare say you were expecting a long example there, but in Perl I've done the whole thing in just six lines - and two of THEM are comments. The trick comes in the use of anonymous list slices:
(split(/\s+/,$report))[1,4];
"Take the string in $report. Divide it into a series of chunks, delimted at white space. But I'm only interested in returned fields 2 and 5 (i.e. numbers 1 and 4 because we start counting at zero).
Taking the data sample line I've included in my program sample, just the host computer name and the year of purchase are returned. No need for me to throw away explicitly the fields I don't want, and using
($cpuname,$yop) =
I can even assign each returned element to an appropriate scalar.
I might not do Perl as much as I used to , but I'm sure enjoying presenting the Perl Course this week!