# csv_to_vcard.pl # converts comma separated phone number data into the vcard 3.0 format # # example input: # anoop , 604-291-4933 , Anoop Sarkar , work # anoop , 604-293-2922 , Anoop Sarkar , home # anoop , 604-618-6214 , Anoop Sarkar , cell while (<>) { chomp; my @f = split(/,/, $_); if (defined $f[4]) { print STDERR "Error in line: $_\n"; next; } my $key = strip_spaces($f[0]); my $subkey = strip_spaces($f[3]); my $name = strip_spaces($f[2]); my $phonenum = strip_spaces($f[1]); $name_tbl{$key} = $name if (!defined $name_tbl{$key}); $phone_tbl{$key}->{$subkey} = $phonenum; #print "key=$key subkey=$subkey name=$name_tbl{$key} phonenum=$phonenum\n"; } for my $key (keys %name_tbl) { print_header(); print_info($key); print_trailer(); } sub strip_spaces { my ($str) = @_; $str =~ s/^\s*//; $str =~ s/\s*$//; return $str; } sub print_info { my ($key) = @_; my $name = $name_tbl{$key}; my @nameflds = split(' ', $name); my $lastname = $nameflds[1]; my $firstname = $nameflds[0]; print "N:$lastname;$firstname;;;\n"; print "FN:$name\n"; for my $subkey (keys %{$phone_tbl{$key}}) { my $type = uc($subkey); my $phonenum = $phone_tbl{$key}->{$subkey}; print "TEL;type=$type:$phonenum\n"; } } sub print_header { print <