Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: 2D table in perl

by choroba (Abbot)
on Oct 27, 2012 at 15:06 UTC ( #1001204=note: print w/ replies, xml ) Need Help??


in reply to 2D table in perl

Not as short as I hoped :-)

#!/usr/bin/perl use warnings; use strict; use Text::Table; # Where the ranges start for C and H: my @c_start = qw/1 3 6 11/; my @h_start = qw/1 11 21 31/; my @file = <DATA>; my @multiply = split " ", $file[1]; shift @multiply; # Discard "amount:" my $i = 0; my %result; for my $ch (grep @$_, # Ignore "num:" and whitespace map [/C([0-9]+)H([0-9]+)/], split ' ', $file[0]) { my ($c, $h) = @$ch; $result{find_range($c, @c_start)} {find_range($h, @h_start)} += $multiply[$i]; $i++; } # Table header. my $table = Text::Table->new( '*', map join('-', ranges($_, @c_start)), 0 .. $#c_start - 1); # Table rows. for my $i (0 .. $#h_start-1) { $table->add(join ('-', ranges($i, @h_start)), map { $result{$_}{$i} // 0 } 0 .. @c_start); } print $table; sub ranges { my ($idx, @arr) = @_; return ($arr[$idx], $arr[$idx + 1] - 1); } sub find_range { my ($value, @ranges) = @_; my $range_start = 0; $range_start++ while $ranges[$range_start + 1] <= $value; return $range_start; } __DATA__ num: C1H10 C5H30 C3H5 C2H8 amount: 1 5 6 9
لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ


Comment on Re: 2D table in perl
Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2014-07-12 16:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (240 votes), past polls