NAME
Data::Range::Compare::Stream::Iterator::File - Simple File Iterator
SYNOPSIS
my
$iterator
=Data::Range::Compare::Stream::Iterator::File->new(
filename
=>
'some_file.csv'
,
);
while
(
$iterator
->has_next) {
my
$next_range
=
$iterator
->get_next;
$next_range
,
"\n"
;
}
DESCRIPTION
This module implements a very simple file iterator interface. This iterator interface assumes that the data is pre-sorted. The result objects returned are ranges: The class the objects are constructed from is determined by $iterator->NEW_FROM. Parsing is handled by $iterator->parse_line.
OO Methods
my $iterator=new Data::Range::Compare::Stream::Iterator::File;
Instance Constructor, all arguments are optional
One of the following arguments is mandatory:
filename
=>
'source_file.csv'
# the file is assumed to be an absolute or relative path to the file location.
fh
=>\
*GLOB
|IO::File->new(
'somefile'
)
# The object itself is assumed to be an open file handle
# filename will be set to the object ref of the fh=>xxx object
Optional arguments:
factory_instance
=>
$obj
# defines the object that implements the $obj->factory($start,$end,$data).
# new ranges are constructed from the factory interfcae. If a factory interface
# is not created an instance of Data::Range::Compare::Stream is assumed.
NEW_FROM
=>
'Data::Range::Compare::Stream'
,
# Depricated!
# sets the object class new ranges will be created from
parse_line
=>
undef
|code_ref
# Default: undef, Sets the code ref to be used when parsing a line
# if not set the default internals will be used
result_to_line
=>
undef
|code_ref
# Default: undef, Sets the code ref used to convert a result to a line that can be parsed
# if not set the default internals will be used
if($iterator->in_error) { ... }
Returns true if there was a problem opening the file.
my $class=$iterator->NEW_FROM;
$class will contain the name of the class new ranges are to be constructed from. The resulting class is required to extend or implement Data::Range::Compare::Stream.
my $ref=$self->parse_line($line);
Given a $line returns the arguments required to construct an object that extends or implements Data::Range::Compare::Stream. When overloading or passing in constructor arguments that provide a call back make sure result_to_line produces the expected line parse_line expects.
sub
parse_line {
my
(
$self
,
$line
)=
@_
;
return
$self
->{parse_line}->(
$line
)
if
defined
(
$self
->{parse_line});
chomp
$line
;
[
split
/\s+/,
$line
];
}
while($iterator->has_next) { do something }
Returns true when there are more rows to fetch.
my $range=$iterator->get_next;
Returns the next $range from the given source file.
my $line=$iterator->result_to_line($range);
Given a $range from $iterator->get_next, this interface converts the $range object into a line that can be parsed by $iterator->parse_line($line). Think of this function as a data serializer for range objects generated by an $iterator object. The code can be described as follows:
sub
result_to_line {
my
(
$self
,
$range
)=
@_
;
my
$line
=
$range
->range_start_to_string.
' '
.
$range
->range_end_to_string.
"\n"
;
return
$line
;
}
my $size=$iterator->get_size
Returns the number of lines in the source file.
my $pos=$iterator->get_pos;
Returns the current line the iterator is on.
SEE ALSO
Data::Range::Compare::Stream::Cookbook
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.