The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Data::Range::Compare::Stream::Cookbook::FILE_RESULT_EXAMPLE - Doc on how to build file result iterators

DESCRIPTION

This section shows how to roll your own Consolidation result iterator, based on file iteration

Special notes

This example assumes your data contains no overlaps no duplicates and is pre-sorted in the desired order

Implementing a new Data::Range::Compare::Stream::Iterator::Consolidate class

Source File

  1 2
  3 5
  9 11
  12 12
  98 174

Example package

  package MyIterator;
  use strict;
  use warnings;
  use IO::File;
  use IO::Select;
  use base qw(Data::Range::Compare::Stream::Iterator::Base);
  use Data::Range::Compare::Stream::Iterator::Consolidate::Result;
  use Data::Range::Compare::Stream;
  
  sub new {
    my ($class,%args)=@_;
    my $has_next;
    my $self=$class->SUPER::new(%args);
  
    if(defined($args{filename})) {
      my $fh=IO::File->new($args{filename});
      if($fh) {
         $self->{fh}=$fh;
         my $line=$fh->getline;
         $self->{next_line}=$line;
         $has_next=defined($line);
      } else {
        $self->{msg}="Error could not open $args{filename} error was: $!";
      }
  
    }
  
    $self->{has_next}=$has_next;
    return $self;
  }
  
  sub get_next {
    my ($self)=@_;
    return undef unless $self->has_next;
  
    my $line=$self->{next_line};
    $self->{next_line}=$self->{fh}->getline;
    $self->{has_next}=defined($self->{next_line});
  
    chomp $line;
    my $range=new Data::Range::Compare::Stream(split /\s+/,$line);
    return new Data::Range::Compare::Stream::Iterator::Consolidate::Result($range,$range,$range);
  }

  1;
  

Putting it all togeather

Now we can use the result iterator.

  use strict;
  use warnings;
  use MyIterator;

  my $iterator=new MyIterator(filename=>'file_example.src');
  while($iterator->has_next) {
    print $iterator->get_next,"\n";
  }
 

AUTHOR

Michael Shipper

Source-Forge Project

As of version 0.001 the Project has been moved to Source-Forge.net

Data Range Compare https://sourceforge.net/projects/data-range-comp/

COPYRIGHT

Copyright 2011 Michael Shipper. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.