NAME
File::Process::Utils - commonly used recipes for File::Process
SYNOPSIS
use File::Process::Utils qw(process_csv);
my $obj = process_csv('foo.csv', has_headers => 1);
DESCRIPTION
Set of utilities that represent some common use cases for File::Process.
METHODS AND SUBROUTINES
process_csv
process_csv(file, options)
Reads a CSV files using Text::CSV_XS and returns an array of hashes or an array or arrays.
Example:
my $obj = process_file(
'foo.csv',
has_header => 1,
csv_options => { sep_char "\t" },
);
- file
-
Filename or file handle of an open CSV file.
- options
-
List of options described below.
- column_names
-
A list of column names that should be used as the CSV header. These names will be in the keys for the hashes returned.
Note: By setting
column_names
to an empty array, you can force the return of an array of hashes instead of an array of arrays. The keys will be set the stringscol0
..col{n-1}
. - csv_options
-
Hash of options that will be passed through to Text::CSV_XS
- has_header
-
Boolean that indicates whether or not the first line of the CSV file should be considred the column titles. These will be used as the hash keys. If
has_header
is not true, then the first line is considered data and included in the returned array.Set
column_names
to an array of strings that will be used as the keys instead in lieu of having a header line. If you do not setcolumn_names
andhas_header
is not true, an array of arrays will be returned instead of an array of hashes. - hooks
-
An array or hash of subroutines that will be passed each element of a row and should return a transformed value for that element.
If you pass a hash, keys should represent one of the column names you passed in the
columns
argument or one of the generated keys (col{n}
).If you pass an array, the array should contain a code reference in the index of the array tha that corresponds to the index in the input you wish to process.
my %hooks = ( col1 => sub { uc shift } ); my $obj = process_csv( 'foo.csv', column_names => [], keep_open => 1, csv_options => { sep_char => "\t" }, hooks => \%hooks, );
Instead of using hooks, which operate at the column level, you could define your own custom
process()
method and pass that as an option toprocess_csv()
as all options are passed through toprocess_file()
..my $obj = process_csv( 'foo.csv', column_names => [], keep_open => 1, csv_options => { sep_char => "\t" }, process => sub { my ( $fh, $lines, $args, $row ) = @_; $row->{col1} = uc $row->{col1}; return $row; } );
- keep_open
-
Boolean that indicates that the file should not be closed after all records are read.
- max_rows
-
Maximum number of rows to process. If undefined, then all lines of the file will be processed.
- skip_list
-
If column names are being used this is hash of keys that will deleted from the returned hash list;
If column names are not being used,
skip_list
is an array of indexes that will be removed from the returned arrays.process_csv( 'foo.csv', has_headers => 1, skip_list => { ssn => 1 } );
SEE ALSO
File::Process, Text::ASCIITable::EasyTable
AUTHOR
Rob Lauer - <rlauer6@comcast.net>