Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: finding intermediate range values from two file columns

by choroba (Cardinal)
on Aug 09, 2016 at 21:03 UTC ( [id://1169437]=note: print w/replies, xml ) Need Help??


in reply to finding intermediate range values from two file columns

As perldigious noted, your sample input and output don't make sense. I modified the input in the following way:
a 11-23 b 33-39 c 40-45 d 48-58
1-34 35-39 40-42 43-49 51-59 62-90

And got the following result:

a 11-23 b 33-34 b 35-39 c 40-42 c 43-45 d 48-49 d 51-58

from the following code:

#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use constant { FROM => 0, TO => 1, NAME => 2, }; my @ranges; open my $F1, '<', shift or die $!; while (<$F1>) { my ($name, $range) = split; my ($from, $to) = split /-/, $range; push @ranges, [$from, $to, $name]; } my $range_idx = 0; open my $F2, '<',shift or die $!; while (<$F2>) { chomp; my ($from, $to) = split /-/; my $end; do { ++$range_idx until $range_idx > $#ranges || $ranges[$range_idx][FROM] <= $to && $ranges[$range_idx][TO] >= $from; last if $range_idx > $#ranges; my $start = $from > $ranges[$range_idx][FROM] ? $from : $ranges[$range_idx][FROM]; $end = $to > $ranges[$range_idx][TO] ? $ranges[$range_idx][TO] : $to; say $ranges[$range_idx][NAME], " $start-$end"; } while $to > ($from = 1 + $end); }

Explanation: @ranges is an array of arrays, it stores the ranges from the first file. While processing the second file, you remember the last range(1) used ( $range_idx ) and for input ranges(2) spreading over more than one range(1), you adjust the $from and try again.

Joining the b's and c's left as an exercise for the reader :-)

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2024-04-24 21:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found