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 )