#!/usr/bin/perl -w use strict; sub address($) { my $address = shift; my( undef, undef, $street, $city, undef, $zip ) = split /;/, $address; if( $street ) { print OUT "address=" . $street . "\n"; } if( $city ) { print OUT "city=" . $city . "\n"; } if( $zip ) { print OUT "zip=" . $zip . "\n"; } } sub load() { my $in = $ENV{'HOME'}."/Downloads/Contacts.vcf"; open( IN, "< $in" ) || die "$0: Cannot open $in\n"; my @list; my $entity; my $looksharp = 0; while( ) { s/\r//g; s/\n//g; if( m/BEGIN:VCARD/ ) { $looksharp = 1; my %hash; push @list, \%hash; $entity = $list[$#list]; next; } if( m/END:VCARD/ ) { $looksharp = 0; next; } if( $looksharp == 1 ) { my ( $var, $val ) = split /:/, $_; if( ! $var || ! $val ) { next; } $val =~ s/^\s*//; $entity->{ uc($var) } = $val; } } close( IN ) or die; return \@list; } sub convert($) { my $list = shift; my @l = @{$list}; my %hash; for( my $i=0; $i<=$#l; $i++ ) { my $c = $l[$i]; if( defined $c->{FN} ) { $hash{ $c->{FN} } = $c; } } return \%hash; } sub save_abook($$) { my $hash = shift; my $file = shift; open( OUT, ">> $file") || die "$0: Cannot open $file\n"; print OUT <{ $name }; print OUT "\n[$i]\n"; print OUT "name=$name\n"; my $email = ""; my @elist; foreach my $var ( keys %{ $c } ) { if( $var =~ m/^EMAIL/ ) { push @elist, $c->{ $var }; } } foreach my $addr ( sort @elist ) { $email .= $addr . ","; } if( length $email > 0 ) { print OUT "email=" . $email . "\n"; } if( defined $c->{'ADR;TYPE=WORK'} ) { address( $c->{'ADR;TYPE=WORK'} ); } elsif( defined $c->{'ADR;TYPE=HOME'} ) { address( $c->{'ADR;TYPE=HOME'} ); } if( defined $c->{'TEL;TYPE=HOME'} ) { print OUT "phone=" . $c->{'TEL;TYPE=HOME'} . "\n"; } elsif( defined $c->{'TEL'} ) { print OUT "phone=" . $c->{'TEL'} . "\n"; } if( defined $c->{'TEL;TYPE=WORK'} ) { print OUT "workphone=" . $c->{'TEL;TYPE=WORK'} . "\n"; } if( defined $c->{'TEL;TYPE=CELL'} ) { print OUT "mobile=" . $c->{'TEL;TYPE=CELL'} . "\n"; } if( defined $c->{'NOTE'} ) { print OUT "custom1=" . $c->{'NOTE'} . "\n"; } $i++; } print OUT "\n"; close( OUT ) or die; } sub save_calcurse($$) { my $hash = shift; my $file = shift; open( OUT, ">> $file") || die "$0: Cannot open $file\n"; my $i = 0; foreach my $name ( sort keys %{ $hash } ) { my $c = $hash->{ $name }; my $bday = ""; if ( defined $c->{'BDAY;VALUE=DATE'} ) { $bday = $c->{'BDAY;VALUE=DATE'}; } elsif( defined $c->{'BDAY'} ) { $bday = $c->{'BDAY'}; } if( $bday ne "" ) { my ( $year, $month, $day ) = split /-/, $bday; print OUT "$month/$day/$year [1] {1Y} Geburtstag: $name\n"; } $i++; } close( OUT ) or die; } my $list = load(); my $hash = convert($list); save_abook( $hash, $ENV{'HOME'}."/.abook/addressbook" ); save_calcurse( $hash, $ENV{'HOME'}."/.calcurse/apts" );