Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Adaptive parser for tab delimited text file

by choroba (Abbot)
on Nov 01, 2012 at 12:35 UTC ( #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.
لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ


Comment on Re: Adaptive parser for tab delimited text file
Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2014-08-22 22:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (168 votes), past polls