AnyData
view release on metacpan or search on metacpan
lib/AnyData.pm view on Meta::CPAN
##################################################################
package AnyData;
###################################################################
#
# This module is copyright (c), 2000 by Jeff Zucker
# All rights reserved.
#
###################################################################
use strict;
use warnings;
require Exporter;
use AnyData::Storage::TiedHash;
use vars qw( @ISA @EXPORT $VERSION );
@ISA = qw(Exporter);
@EXPORT = qw( adConvert adTie adRows adColumn adExport adDump adNames adFormats);
#@EXPORT = qw( ad_fields adTable adErr adArray);
$VERSION = '0.12';
sub new {
my $class = shift;
my $format = shift;
my $flags = shift || {};
my $del_marker = "\0";
$format = 'CSV' if $format eq 'ARRAY';
my $parser_name = 'AnyData/Format/' . $format . '.pm';
eval { require $parser_name; };
die "Error Opening File-Parser: $@" if $@;
$parser_name =~ s#/#::#g;
$parser_name =~ s#\.pm$##g;
my $col_names = $flags->{col_names} || undef;
if ($col_names) {
my @cols;
@cols = ref $col_names eq 'ARRAY'
? @$col_names
: split ',',$col_names;
$flags->{col_names} = \@cols;
}
$flags->{del_marker} = $del_marker;
$flags->{records} ||= $flags->{data};
$flags->{field_sep} ||= $flags->{sep_char} ||= $flags->{ad_sep_char};
$flags->{quote} ||= $flags->{quote_char} ||= $flags->{ad_quote_char};
$flags->{escape} ||= $flags->{escape_char}||= $flags->{ad_escape_char};
$flags->{record_sep}||= $flags->{eol} ||= $flags->{ad_eol};
# $flags->{skip_first_row}
my $parser = $parser_name->new ($flags);
if ($parser->{col_names} && !$col_names) {
my @cols;
@cols = ref $parser->{col_names} eq 'ARRAY'
? @{$parser->{col_names}}
: split ',',$parser->{col_names};
$flags->{col_names} = \@cols;
$parser->{col_names} = \@cols;
}
my $storage_name = $flags->{storage}
|| $parser->storage_type()
|| 'File';
$storage_name = "AnyData/Storage/$storage_name.pm";
eval { require $storage_name; };
die "Error Opening Storage Module: $@" if $@;
$storage_name =~ s#/#::#g;
$storage_name =~ s#\.pm$##g;
my $storage = new $storage_name({del_marker=>$del_marker,%$flags});
if ($storage_name =~ 'PassThru') {
$storage->{parser} = $parser;
$parser->{del_marker} = "\0";
$parser->{url} = $flags->{file}
if $flags->{file} and $flags->{file} =~ /http:|ftp:/;
}
my $self = {
storage => $storage,
parser => $parser,
};
return( bless($self,$class) );
}
sub adFormats {
my @formats;
for my $dir(@INC) {
my $format_dir = "$dir/AnyData/Format";
if ( -d $format_dir ) {
local *D;
opendir(D,$format_dir);
@formats = grep {/\.pm$/} readdir(D);
last;
}
}
unshift @formats,'ARRAY';
@formats = map {s/^(.*)\.pm$/$1/;$_} @formats;
return @formats;
}
sub export {
my $self=shift;
my $fh = $self->{storage}->{fh};
my $mode = $self->{storage}->{open_mode} || 'r';
# if ( $self->{parser}->{export_on_close}
# && $self->{storage}->{fh}
# && $mode ne 'r'
# ){
return $self->{parser}->export( $self->{storage}, @_ );
# }
}
( run in 0.604 second using v1.01-cache-2.11-cpan-39bf76dae61 )