Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Adaptive parser for tab delimited text file

by choroba (Cardinal)
on Nov 01, 2012 at 12:35 UTC ( [id://1001816]=note: print w/replies, xml ) Need Help??


in reply to Adaptive parser for tab delimited text file

This works for me. There might be some glitches in the input format not shown in the sample, though.
#!/usr/bin/perl use warnings; use strict; use Data::Dumper; <>; # Skip the first + line. my %hash; my ($cell, $cellr); while (my $header = <>) { if ($header =~ /\b/) { if ($header =~ /^CELL\s*$/) { $cell = <>; chomp $cell; next; } my @pos; my $flip; while ($header =~ /(\b|$)/g) { push @pos, $-[0] if ++$flip % 2; # Remember the p +osition where a field starts. } chomp (my $value_line = <>); if (length $header <= length $value_line) { $pos[-1] = length $value_line; # Do not clip th +e value line if longer then header. } else { $value_line .= ' ' x (length($header)); # Do not die if +the last fields are empty. } my @values; my @fields = split /\s+/, $header; for my $i (0 .. $#fields) { push @values, substr $value_line, $pos[$i], $pos[$i+1] - $ +pos[$i]; } s/^ +| +$//g for @values; if ($fields[0] eq 'CELLR') { $cellr = shift @values; shift @fields; } $hash{$cell}{$cellr}{$_} = shift @values for @fields; } } print Dumper \%hash;
Updated: Keep the whole structure in one hash.
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1001816]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-04-19 14:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found