NAME
Snail::CSV - Perl extension for read/write/update CSV files.
SYNOPSIS
use Snail::CSV;
my $csv = Snail::CSV->new(\%args); # %args - Text::CSV_XS options
my %filter = (
'pq' => 3,
'name' => sub { my $name = shift; $name =~ /XP$/ ? 1 : 0; }
);
$csv->setFile("lamps.csv", [ "id", "name", "pq" ], \%filter);
my $lamps = $csv->parse;
# or
$csv->parse;
# some code
my $lamps = $csv->getData;
$csv->setFile("tents.csv", [ "id", "name", "brand", "price" ]);
my $tents = $csv->fetchall_hashref; # $tents is HASHREF
for my $item (values %{$tents})
{
$item->{'price'} = $item->{'brand'} eq 'Marmot' ? 0.95 * $item->{'price'} : $item->{'price'};
}
$csv->setData($tents);
$csv->update; # to tents.csv
# or
for my $item ( @{ $csv->fetchall_arrayref } )
{
$item->{'price'} = $item->{'brand'} eq 'Marmot' ? 0.95 * $item->{'price'} : $item->{'price'};
}
$csv->update("/full/path/to/new_file.csv"); # to new CSV file
DESCRIPTION
This module can be used to read/write/update data from/to CSV files. Text::CSV_XS is used for parsing CSV files.
METHOD
- new()
- new(\%args)
-
This is constructor. %args - Text::CSV_XS options. Return object.
- setFile('file.csv', \@fields_name)
- setFile('file.csv', \@fields_name, \%filter)
-
Set CSV file, fields name and filters for fields name. Return object.
Fields and Filters:
my @fields_name = ("id", "name", "pq"); my %filter = ( 'pq' => 3, 'name' => sub { my $name = shift; $name =~ /XP$/ ? 1 : 0; } );
- parse
-
Read and parse CSV file. Return arrayref.
- fetchall_arrayref
-
An alternative to parse. Return arrayref.
- fetchall_hashref
-
An alternative to parse. Return hashref.
- getData
-
Return current data. Use this method after parse (fetchall_arrayref, fetchall_hashref).
- setData(\@data)
- setData(\%data)
-
Set new data. Return object.
- update
- update('/full/path/to/new_file.csv')
-
Attention! If new file not defined, update current file. Return object.
- save
- save('/full/path/to/new_file.csv')
-
Save current object data. Attention! If new file not defined, save data to current file. Return object.
- version
-
Return version number.
EXPORT
None by default.
EXAMPLE
First example.
Code:
#!/usr/bin/perl -w
use strict;
use Snail::CSV;
use Data::Dumper;
my $csv = Snail::CSV->new();
$csv->setFile("lamps.csv", [ "id", "name", "pq" ]);
# or
$csv->setFile("lamps.csv", [ "id", "", "pq" ], { 'pq' => sub { my $pq = shift; $pq > 2 ? 1 : 0; } });
my $lamps = $csv->parse;
print Dumper($lamps);
lamps.csv
1;"Tikka Plus";3
2;"Myo XP";1
3;"Duobelt Led 8";5
If you wrote:
$csv->setFile("lamps.csv", [ "id", "name", "pq" ]);
then dump
is:
$VAR1 = [
{
'id' => '1',
'name' => 'Tikka Plus',
'pq' => '3'
},
{
'id' => '2',
'name' => 'Myo XP',
'pq' => '1'
},
{
'id' => '3',
'name' => 'Duobelt Led 8',
'pq' => '5'
}
];
but if:
$csv->setFile("lamps.csv", [ "id", "", "pq" ], { 'pq' => sub { my $pq = shift; $pq > 2 ? 1 : 0; } });
dump
is:
$VAR1 = [
{
'id' => '1',
'pq' => '3'
},
{
'id' => '3',
'pq' => '5'
}
];
Other example.
Done.
TODO
Goog idea? Welcome...
SEE ALSO
AUTHOR
Dmitriy Dontsov, <mit@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2006 by Dmitriy Dontsov
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.