AnyData
view release on metacpan or search on metacpan
lib/AnyData/Storage/RAM.pm view on Meta::CPAN
# and $row[0] eq $parser->{skip_mark};
#
}
}
if ((ref $parser) !~ /Fixed|Paragraph/
&& !$parser->{keep_first_line}
&& !$parser->{col_names}
) {
$col_names = shift @$table_ary;
}
#use Data::Dumper; die Dumper $table_ary;
}
}
# if ($file and !(ref $file eq 'ARRAY') and $file !~ m'^http://|ftp://' and !(scalar @$table_ary) ) {
if ((ref $parser) !~ /XML/ ) {
my $size = scalar @$table_ary if defined $table_ary;
if ($file and !(ref $file eq 'ARRAY') and !$size ) {
if ($file =~ m'^http://|ftp://') {
# ($table_ary,$col_names) =
# $self->get_remote_data($file,$parser);
}
else {
($table_ary,$col_names) =
$self->get_local_data($file,$parser,$read_mode);
}
}
}
my @array = @$col_names if ref $col_names eq 'ARRAY';
#print "@array" if @array;
if ($col_names && scalar @array == 0 ) {
@array = (ref $parser =~ /Fixed/)
? split ',', $col_names
: $parser->read_fields($col_names);
}
my $col_nums;
$col_nums = $self->set_col_nums() if $col_names;
my %table = (
index => 0,
file => $file,
records => $table_ary,
col_nums => $col_nums,
col_names => \@array,
);
for my $key(keys %table) {
$self->{$key}=$table{$key};
}
#use Data::Dumper; print Dumper $self; exit;
#use Data::Dumper; print Dumper $table_ary;
#use Data::Dumper; print Dumper $self->{records} if (ref $parser) =~ /Weblog/;
}
sub close { my $s = shift; undef $s }
sub get_remote_data {
my $self = shift;
my $file = shift;
my $parser = shift;
$ENV = {} unless defined $ENV;
$^W = 0;
undef $@;
my $user = $self->{user} || $self->{username};
my $pass = $self->{pass} || $self->{password};
eval{ require 'LWP/UserAgent.pm'; };
# eval{ require 'File/DosGlob.pm'; };
die "LWP module not found! $@" if $@;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $file);
$req->authorization_basic($user, $pass) if $user and $pass;
my $res = $ua->request($req);
die "[$file] : " . $res->message if !$res->is_success;
$^W = 1;
return $res->content;
# return $parser->get_data($res->content,$self->{col_names});
}
sub export {
my $self = shift;
my $parser = shift;
print "##";
return unless $parser->{export_on_close} && $self->{open_mode} ne 'r';
# return $parser->export( $self->{records}, $self->{col_names}, $self->{deleted} );
#$self->{file_manager}->str2file($str);
}
sub DESTROY {
#shift->export;
#print "DESTROY";
}
sub get_local_data {
my $self = shift;
my $file = shift;
my $parser = shift;
my $open_mode = shift || 'r';
my $adf = AnyData::Storage::File->new;
# $adf->open_table($parser,$file,'r');
my $fh = $adf->open_local_file($file,$open_mode);
#print Dumper $file,$adf; exit;
$self->{file_manager} = $adf;
$self->{fh} = $fh;
#use Data::Dumper; print Dumper $self;
# my $fh = $adf->{fh};
return([],$self->{col_names}) if 'co' =~ /$open_mode/;
# if ((ref $parser) =~ /HTML/) {
# print "[[$file]]";
# for (<$fh>) { print; }
# }
local $/ = undef;
my $str = <$fh>;
# $fh->close;
#print $str if (ref $parser) =~ /HTML/;
return $self->{col_names} unless $str;
return $parser->get_data($str,$self->{col_names});
}
sub dump {
my $self = shift;
print
"\nTotal Rows = ", scalar @{ $self->{records} },
"\nCurrent Row = ", $self->{index},
"\nData = ", Dumper $self->{records},
;
}
( run in 1.318 second using v1.01-cache-2.11-cpan-437f7b0c052 )