in reply to Parsing a print file
Update: Woo, my 100th post, too bad more than half of them came out under 10 points.#!perl -w use strict; use Data::Dumper; my %fields_types; my @data; my %prev; my $biggest; while (<DATA>) { if (/^#(.*)/) { # new field declaration my @fields = split ' ',$1; $biggest = @fields if @fields > $biggest; $fields_types{scalar(@fields)} = \@fields; } else { my @line = split /(?<!,)(?<!\s)\s+/, $_; # split on whitesp +ace not following a comma if (exists($fields_types{scalar(@line)})) { my %tmp; @tmp{ @{ $fields_types{scalar(@line)} } } = @line; # use data from most recent full line of data if (scalar(@line) != $biggest) { for my $field ( keys %prev ) { $tmp{$field} ||= $prev{$field}; } } else { %prev = %tmp; } push @data, \%tmp; } else { warn "No definition for " . scalar(@line) . " field(s) at +input line $.\n"; } } } print Dumper( \@data ); __DATA__ #Name ID PS Gender Age Month Code Cap Pool #Month Code Cap Pool LName, FName 99999 99 M 99.9 12/2000 Add 99.99 99.99 11/2000 New 99.99 99.99
|
|---|