version 1.26, 2020/11/30 14:38:35 |
version 1.27, 2020/11/30 16:22:36 |
|
|
"wellsfargo" => \&import_wellsfargo, |
"wellsfargo" => \&import_wellsfargo, |
); |
); |
|
|
|
my %date_formats = ( |
|
'MM/DD/YYYY' => 's#(\d+)/(\d+)/(\d+)#$3$1$2#', |
|
'MM/DD/YY' => 's#(\d+)/(\d+)/(\d+)#20$3$1$2#', |
|
'YYYY-MM-DD' => 's#(\d+)-(\d+)-(\d+)#$1$2$3#', |
|
'DD.MM.YY' => 's#(\d+)\.(\d+)\.(\d+)#20$3$2$1#', |
|
); |
|
|
# === SUBROUTINES ===================================================== |
# === SUBROUTINES ===================================================== |
|
|
sub usage () { |
sub usage () { |
Line 52 $banks{$account_name} or die "unknown accountname: $ac |
|
Line 59 $banks{$account_name} or die "unknown accountname: $ac |
|
# Parse the configuration file. |
# Parse the configuration file. |
my $fn = "import/" . $account_name . ".txt"; |
my $fn = "import/" . $account_name . ".txt"; |
open my $in, '<', $fn or die "$fn: $!"; |
open my $in, '<', $fn or die "$fn: $!"; |
my ($cost_center_field, $csv_account, $date_field, $date_format, |
my ($cost_center_field, $csv_account, $date_field, $date_regex, |
$delim, $header, $quantity_field, $quote, @amount_fields, |
$delim, $header, $quantity_field, $quote, @amount_fields, |
@compiled, @description_fields, @ignored); |
@compiled, @description_fields, @ignored); |
while (<$in>) { |
while (<$in>) { |
|
|
} |
} |
if (/^DATE\s+(\d+)\s+(\S+)/) { |
if (/^DATE\s+(\d+)\s+(\S+)/) { |
$date_field = $1 - 1; |
$date_field = $1 - 1; |
$date_format = $2; |
$date_regex = $date_formats{$2} |
|
or die "unknown date format: $2"; |
next; |
next; |
} |
} |
if (/^DELIM\s+(\S)$/) { |
if (/^DELIM\s+(\S)$/) { |
Line 160 LINE: while (<STDIN>) { |
|
Line 168 LINE: while (<STDIN>) { |
|
$matches or die "unmatched CSV line: $line"; |
$matches or die "unmatched CSV line: $line"; |
my $date = $fields[$date_field] or |
my $date = $fields[$date_field] or |
die "date parse error: $line"; |
die "date parse error: $line"; |
if ($date_format eq "MM/DD/YYYY") { |
eval '$date =~ ' . $date_regex; |
$date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#; |
|
} elsif ($date_format eq "MM/DD/YY") { |
|
$date =~ s#(\d+)/(\d+)/(\d+)#20$3$1$2#; |
|
} elsif ($date_format eq "YYYY-MM-DD") { |
|
$date =~ s#(\d+)-(\d+)-(\d+)#$1$2$3#; |
|
} elsif ($date_format eq "DD.MM.YY") { |
|
$date =~ s#(\d+)\.(\d+)\.(\d+)#20$3$2$1#; |
|
} else { |
|
die "unhandled date format: $line"; |
|
} |
|
foreach my $i (@amount_fields) { |
foreach my $i (@amount_fields) { |
if (defined($fields[$i])) { |
if (defined($fields[$i])) { |
$fields[$i] =~ s/,/./; |
$fields[$i] =~ s/,/./; |