NAME
FP::Text::CSV - functional interface to Text::CSV
SYNOPSIS
csv_fh_to_rows
csv_file_to_rows
rows_to_csv_fh
rows_to_csv_file)
;
my
$csvparams
= +{
sep_char
=>
";"
,
eol
=>
"\n"
};
# $csvparams and any of its entries are optional,
# for the defaults see the Text::CSV docs.
mkdir
".tmp"
;
# -- Output: ---
my
$rows
=
cons [
"i"
,
"i^2"
],
stream_iota->
map
(
sub
{
my
(
$i
) =
@_
;
[
$i
,
$i
*$i
]
})->take(100);
rows_to_csv_fh (Keep(
$rows
), xopen_write(
".tmp/a1.csv"
),
$csvparams
);
# or
rows_to_csv_file (
$rows
,
".tmp/a2.csv"
,
$csvparams
);
# -- Input: ---
my
$p
= csv_line_xparser
$csvparams
;
my
@vals
=
&$p
(
"1;2;3;4\n"
);
is_equal \
@vals
, [1,2,3,4];
my
$itemstream1
=
csv_fh_to_rows(xopen_read(
".tmp/a1.csv"
),
$csvparams
);
# or
my
$itemstream2
= csv_file_to_rows(
".tmp/a2.csv"
,
$csvparams
);
is_equal
$itemstream1
,
$itemstream2
;
is_equal
$itemstream2
->first, [
"i"
,
"i^2"
];
is_equal
$itemstream2
->second, [ 0, 0 ];
is_equal
$itemstream2
->
ref
(10), [ 9, 81 ];
DESCRIPTION
Handle CSV input and output in the form of functional streams (lazily computed linked lists).
NOTE
Text::CSV added a 'csv' export somewhat recently. Together with FP::autobox that can make for a nice solution (although not lazy), too.
This is alpha software! Read the status section in the package README or on the website.