package Finance::StockAccount::Import; our $VERSION = '0.01'; use strict; use warnings; use Carp; use Finance::StockAccount; use Finance::StockAccount::AccountTransaction; sub new { my ($class, $file, $tzoffset) = @_; $file or confess "Please pass a file to import.\n"; my $self = { file => $file, fh => undef, headers => undef, tzoffset => $tzoffset || 0, }; return bless($self, $class); } sub renameMe { my ($self, $key, $value) = @_; if ($key eq 'date') { $self->extractDate($value) or return 0; } elsif ($key eq 'price') { $self->extractPrice($value) or return 0; } elsif ($key eq 'commission') { $self->extractCommission($value) or return 0; } elsif ($key eq 'symbol') { $self->extractSymbol($value) or return 0; } } sub extractPrice { my ($self, $priceString) = @_; my $pricePattern = ''; if ($priceString =~ /$pricePattern/) { my $price = $1; $price =~ s/,//g; $self->{price} = $price; } else { warn "Failed to recognize price pattern in string $priceString.\n"; return 0; } } sub extractCommission { my ($self, $commissionString) = @_; my $pricePattern = ''; if ($commissionString =~ /$pricePattern/) { my $commission = $1; $commission =~ s/,//g; $self->{commission} = $commission; } else { warn "Failed to recognize commission pattern in string $commissionString.\n"; return 0; } } sub extractSymbol { my ($self, $symbolString) = @_; my $symbolPattern = ''; if ($symbolString =~ /$symbolPattern/) { $self->{symbol} = $1; } else { warn "Failed to recognize symbol pattern in string $symbolString.\n"; return 0; } } sub nextAt { # method that returns the next AccountTransaction object, # to be overridden by child classes return 0; } sub stockAccount { my $self = shift; my $sa = Finance::StockAccount->new(); while (my $at = $self->nextAt()) { $sa->addToSet($at); } return $sa; } 1;