#!/usr/bin/perl if (not $ARGV[0] or $ARGV[0] =~ /^-(h|-help)$/ or not -f $ARGV[0]) { print <<'EOF'; # script to transform any CSV file into a CSV file to be imported by Mozilla # in the Address Book. # Look for @@@ and modify the script to your needs. # Synopsis: csv2moz (a file moz is created to be imported # into Mozilla) EOF exit 0 } use IO::File; require Text::CSV_XS; my $jpcsv = Text::CSV_XS->new({ 'binary' => 1, 'eol' => "\012" }); my $mozcsv = Text::CSV_XS->new({ 'binary' => 1, 'eol' => "\012", 'escape_char' => "\\" }); my $jpfile = new IO::File "$ARGV[0]", "r" || die; my $mozfile = new IO::File "moz$ARGV[0]", "w" || die; my $jpcols; my $mozcols; $jpcols = $jpcsv->getline($jpfile); while ( @$jpcols ) { print @$jpcols,"\n"; $mozcsv->print($mozfile, csv2moz($jpcols) ) || die; $jpcols = $jpcsv->getline($jpfile); } exit 0; sub csv2moz { my $myjp=shift; my @jp = qw/Last First Role Company Phone Mobile Email Timezone Organization GeoScope/; my %jp; my @moz = qw/First Last Display Nickname Email AdditionalEmail WorkPhone HomePhone Fax Pager Mobile HomeAddress1 HomeAddress2 HomeCity HomeState HomeZip HomeCountry WorkAddress1 WorkAddress2 WorkCity WorkState WorkZip WorkCountry WorkTitle WorkDepartment WorkOrganization WorkWebPage HomeWebPage BirthYear BirthMonth BirthDay Custom1 Custom2 Custom3 Custom4 Notes/; my %moz; # we transform the jpilot and mozilla arrays in a hash, # makes things clearer. for(my $i=0;$i<@jp;$i++) { $jp{$jp[$i]} = $jpcols->[$i]; } for(my $i=0;$i<@moz;$i++) { $moz{$moz[$i]} = $moz[$i]; } ## Now let's do the translation... @@@ you might not like mine. $moz{"First"}=$jp{"First"}; $moz{"Last"}=$jp{"Last"}; $moz{"Display"}=$jp{"First"}." ".$jp{"Last"}; ## Phones and Email $moz{"WorkPhone"}=$jp{"Phone"}; $moz{"Mobile"}=$jp{"Mobile"}; $moz{"Email"}=$jp{"Email"}; $moz{"WorkState"}=$jp{"Timezone"}; $moz{"WorkCountry"}=$jp{"GeoScope"}; $moz{"WorkTitle"}=$jp{"Role"}; $moz{"WorkDepartment"}=$jp{"Organization"}; $moz{"WorkOrganization"}=$jp{"Company"}; ## and we transform back the mozilla array... for(my $i=0;$i<@moz;$i++) { # for each, look if something has moved if ( $moz{$moz[$i]} eq $moz[$i] ) { # no $moz[$i]=""; } else { # yes $moz[$i] = $moz{$moz[$i]}; # following required due to Mozilla (1.2.1, SuSE 8.2) # not escaping double quotes at import time. $moz[$i] =~ s/"/'/g; } } return \@moz; }