use strict; my $contacts = 'D:\Phone\Contacts.csv'; my $vcards = 'D:\Phone\Contacts\\'; if (! @ARGV) { print "$0: Use $0 \n"; exit 1; } if ($ARGV[0] eq 'csv') { open(CSV, ">$contacts"); print CSV "Name;Number;Home Number;Company Name;Email Address;Office Number;Fax Number\n"; opendir(DIR, $vcards); my @cards = grep { /^(.+)\.vcf$/ } sort readdir(DIR); closedir(DIR); foreach my $card (@cards) { my $name, my $number, my $home, my $company, my $email, my $work, my $fax; open(VCARD, "$vcards$card"); while () { chomp $_; s/\r//; # Empty lines if ($_ =~ /^\s*$/) { next; } if ($_ =~ /N;.*:(.*)/) { $name = $1; } elsif ($_ =~ /TEL;CELL:(.*)/) { $number = $1; } elsif ($_ =~ /TEL;HOME:(.*)/) { $home = $1; } elsif ($_ =~ /TEL;WORK:(.*)/) { $work = $1; } elsif ($_ =~ /TEL;FAX:(.*)/) { $fax = $1; } elsif ($_ =~ /EMAIL;INTERNET:(.*)/) { $email = $1; } elsif ($_ =~ /ORG;.*:(.*)/) { $company = $1; } elsif ($_ =~ /BEGIN:VCARD|VERSION:2.1|END:VCARD/) { next; } else { print "Unknown line: '$_' ($card)\n"; } } close(VCARD); print CSV "$name;$number;$home;$company;$email;$work;$fax\n"; } close(CSV); } elsif ($ARGV[0] eq 'vcards') { open(CSV, $contacts); while () { chomp $_; s/\r//; # Empty lines if ($_ =~ /^\s*$/) { next; } my @values = split(/;/, $_); if ($values[0] eq 'Name') { next; } open(VCARD, ">$vcards$values[0].vcf"); print VCARD "BEGIN:VCARD\nVERSION:2.1\n"; print VCARD "N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:$values[0]\n"; if ($values[1]) { print VCARD "TEL;CELL:$values[1]\n"; } if ($values[2]) { print VCARD "TEL;HOME:$values[2]\n"; } if ($values[5]) { print VCARD "TEL;WORK:$values[5]\n"; } if ($values[6]) { print VCARD "TEL;FAX:$values[6]\n"; } if ($values[4]) { print VCARD "EMAIL;INTERNET:$values[4]\n"; } if ($values[3]) { print VCARD "ORG;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:$values[3]\n"; } print VCARD "END:VCARD\n"; close(VCARD); } close(CSV); } else { print "$0: Use $0 \n"; exit 1; } exit 0;