NAME

Text::Parts - split text file to some parts(from one line start to another/same line end)

VERSION

Version 0.01

SYNOPSIS

If you want to split Text file to some number of parts:

use Text::Parts;

my $splitter = Text::Parts->new(file => $file);
my (@parts) = $splitter->split(num => 4);

foreach my $part (@parts) {
   while(my $l = $part->getline) { # or <$part>
      # ...
   }
}

If you want to split Text file by about specified size:

use Text::Parts;

my $splitter = Text::Parts->new(file => $file);
my (@parts) = $splitter->split(size => 10); # size of part will be more that 10.
# same as the previous example

If you want to split CSV file:

use Text::Parts;
use Text::CSV_XS; # don't work with Text::CSV_PP if you want to use {binary => 1} option

my $csv = Text::CSV_XS->new();
my $splitter = Text::Parts->new(file => $file, parser => $csv);
my (@parts) = $splitter->split(num => 4);

foreach my $part (@parts) {
   while(my $col = $part->getline_parser) { # getline_parser returns parsed result
      print join "\t", @$col;
      # ...
   }
}

DESCRIPTION

This moudle splits file by specified number of part. The range of each part is from one line start to another/same line end. For example, file content is the following:

1111
22222222222222222222
3333
4444

If $splitter->split(num => 3), split like the following:

1st part: 1111 22222222222222222222

2nd part: 3333

3rd part: 4444

At first, split method trys to split by bytes of file size / 3, Secondly, trys to split by bytes of rest file size / the number of rest part. So that:

1st part : 36 bytes / 3 = 12 byte + bytes to line end(if needed)
2nd part : (36 - 26 bytes) / 2 = 5 byte + bytes to line end(if needed)
last part: rest part of file

METHODS

new

$s = Text::Parts->new(file => $filename);
$s = Text::Parts->new(file => $filename, parser => Text::CSV_XS->new({binary => 1}));

Constructor. It can take following optins:

num

number how many you want to split.

size

file size how much you want to split. This value is used for calucurating num. If file size is 100 and this value is 25, num is 4.

file

target file which you want to split.

parser

Pass parser object(like Text::CSV_XS->new()). The object must have method which takes filehandle and whose name is getline as default. If the object's method is different name, pass the name to parser_method option.

parser_method

name of parser's method. default is getline.

check_line_start

If this options is true, check line start and move to this position before <$fh> or parser's getline/parser_method. It may be useful when parser's getline/parser_method method doesn't work correctly when parsing wrong format.

default value is 0.

file

my $file = $s->file;
$s->file($filename);

get/set target file.

parser

my $parser_object = $s->parser;
$s->parser($parser_object);

get/set paresr object.

parser_method

my $method = $s->parser_method;
$s->parser_method($method);

get/set paresr method.

split

my @parts = $s->split(num => $num);
my @parts = $s->split(size => $size);

Try to split target file to $num of parts. The returned value is array of Text::Parts::Part object. If you pass size => bytes, calcurate $num from file size / $size.

This returns array of Text::Parts::Part object. See "Text::Parts::Part METHODS".

eol

my $eol = $s->eol;
$s->eol($eol);

get/set end of line string. default value is $/.

Text::Parts::Part METHODS

Text::Parts::Part objects are returned by split method.

getline

my $line = $part->getline;

return 1 line. You can use <$part>, also.

my $line = <$part>

getline_parser

my $parsed = $part->getline_parser;

returns parsed result.

eof

$part->eof;

If current position is the end of parts, return true.

AUTHOR

Ktat, <ktat at cpan.org>

BUGS

Please report any bugs or feature requests to bug-text-parts at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Text-Parts. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Text::Parts

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

Copyright 2011 Ktat.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.