#!/usr/bin/perl
#
# Small Zaurus ZDBAT Address book to Google Contacts converter
# Public Domain.
#

use Text::CSV;
use Data::Dumper;
use MIME::QuotedPrint;

my @fields = qw (CARDID CATEGORY FULL TITL LNME FNME MNME SUFX FLAS LNPR FNPR NAPR CPNY CPPR SCTN PSTN TEL2 FAX2 CPS2 BSTA BCTY BSTR BZIP BCTR BWEB OFCE PRFS ASST MNGR BPGR CPS1 TEL1 FAX1 HSTA HCTY HSTR HZIP HCTR HWEB DMAL MAL1 SPUS GNDR BRTH ANIV NCNM CLDR MEM1 GRPS);
my @rows;
my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
                   or die "Cannot use CSV: ".Text::CSV->error_diag ();


open my $fh, "<", $ARGV[0] or die "file: $!";
while ( my $row = $csv->getline( $fh ) ) {
    #$row->[2] =~ m/pattern/ or next; # 3rd field should match
    # push @rows, $row;
    # CARDID,CATEGORY,FULL,TITL,LNME,FNME,MNME,SUFX,FLAS,LNPR,FNPR,NAPR,CPNY,CPPR,SCTN,PSTN,TEL2,FAX2,CPS2,BSTA,BCTY,BSTR,BZIP,BCTR,BWEB,OFCE,PRFS,ASST,MNGR,BPGR,CPS1,TEL1,FAX1,HSTA,HCTY,HSTR,HZIP,HCTR,HWEB,DMAL,MAL1,SPUS,GNDR,BRTH,ANIV,NCNM,CLDR,MEM1,GRPS
    my $n = 0;
    my %r;
    for my $f (@fields) {
	$r{"$f"} = $row->[$n];
	$n++;
    }
#    print Dumper(\%r);

    my $vcard = "BEGIN:VCARD
VERSION:2.1
FN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:".encode_qp($r{FULL}, "", 1)."
TEL;TYPE=VOICE:$r{CPS1}
TEL;TYPE=VOICE:$r{CPS2}
TEL;TYPE=HOME;TYPE=VOICE:$r{TEL1}
TEL;TYPE=HOME;TYPE=VOICE:$r{TEL2}
EMAIL:$r{DMAL}
ADR;TYPE=HOME:;$r{BSTR} $r{BCTY};;;;;
ORG:$r{CPNY}
NOTE;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:".encode_qp($r{MEM1}, "", 1)."
END:VCARD

";

   # cleanup remove empty lines
   $vcard =~ s/^[^:]+:[ ;]*$//mg;
   
   print "$vcard"; 

}
$csv->eof or $csv->error_diag();
close $fh;
