in reply to construct a matrix by different intervals
and the output is:#!/usr/bin/perl use warnings; use strict; package main; my %ranges = (); while (<DATA>) { my ( $key, $initial_value, $final_value ) = split /\s+/, $_; push @{$ranges{$key}}, [ $initial_value, $final_value ]; } my @headers = (1, 2, 3, 5, 7, 10, 11, 15, 20); my @keys = ( 'A', 'B', 'C', 'D' ); my $value = sprintf "ID %2d %2d %2d %2d %2d %2d %2d %2d %2d\n", @heade +rs; print $value; foreach my $k (@keys) { my @results = map { &in_range($k, $_) } @headers; $value = sprintf "%-2s %2d %2d %2d %2d %2d %2d %2d %2d %2d\n", $k, + @results; print $value; } sub in_range { my $letter = shift; my $test_value = shift; if ( defined( $ranges{$letter} )) { foreach my $ref ( @{$ranges{$letter}} ) { if (($ref->[0] <= $test_value) && ($ref->[1] >= $test_value)) { return 1; } } } return 0; } __DATA__ A 1 2 A 7 10 A 15 20 B 3 5 B 11 15 C 5 10 D 10 20
~/perl/monks$ ./ranges.pl ID 1 2 3 5 7 10 11 15 20 A 1 1 0 0 1 1 0 1 1 B 0 0 1 1 0 0 1 1 0 C 0 0 0 1 1 1 0 0 0 D 0 0 0 0 0 1 1 1 1
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: construct a matrix by different intervals
by mozart (Initiate) on Aug 20, 2007 at 13:06 UTC |