(nettipäiväkirja 23.05.2014) Nämä työvälineet, joilla saan yhteystiedot tekstimuodosta kännykkään, osoittautuvat vuosi vuodelta kätevämmiksi. Palveluihin talletetuissa kontaktitietokannoissa on nimittäin semmoinen ongelma, että tiedot mätänevät pikku hiljaa: kun tietoa siirrellään eteenpäin järjestelmästä toiseen, kukin järjestelmä lisää tietoon omien tuonti- ja vientitoimintojensa bugien aiheuttamat virheet. On mielettömän kätevää, että tiedot ovat raakatekstiformaatissa, joka on muuttumaton ja ikuinen. (No ok, jouduin kerran muuntamaan koko kontaktitietokannan merkistön iconvilla.) On myös mielettömän kätevää, että tiedot ovat versiohallinnassa, koska sillä tavoin ei synny epäselvyyttä, missä on talletettuna viimeisin, ajantasainen tieto.
Ajan mittaan minulle on ehtinyt kertyä kaiken maailman muunnostyökaluja yhteystietojen tuontiin ja vientiin (lähinnä vientiin, koska tämä raakateksti on yhteystietojeni master data). Minulla on esimerkiksi muunnokset gnokii-muotoon, vcardiksi, RFC822-headeriin kelpaavaksi osoitelistaksi, HTML-taulukoksi jne. Viimeksi, kun totesin firman Zimbran kontaktilistaan päätyneen jostain helvetin syystä duplikaatit kaikesta, vetäisin sen vain tyhjäksi, tein omasta osoitekirjastani exportin vcard-muodossa ja vein sen Zimbraan. Kaikki toimii kuin rasvattu.
Vcard-skripti on nykyään tämän näköinen:
#!/usr/bin/awk -f BEGIN { FS="\t"; } $4 && $4 != "?" { print "BEGIN:VCARD"; print "VERSION:2.1"; cnameindex = match($1, "([^ ]* os. )?[^ ]*$"); match($1, "^[^ ]*"); print "N:" substr($1,cnameindex) ";" substr($1,0,cnameindex-1); print "FN:" $1; if ($2 != "?") { print "EMAIL:" $2; } if ($5 != "") { split($5,osoite,","); split(osoite[2],kunta," "); katuos = osoite[1]; pnro = kunta[1]; pkunta = kunta[2]; print "ADR;HOME:;;" katuos ";" pkunta ";;" pnro ";Finland"; } split($4,numerot,","); for ( i in numerot ) { if (numerot[i] !~ /\+358/) type = "INTL"; else if (numerot[i] ~ /358([123]0|9191|9310)/) type = "WORK"; else if (numerot[i] ~ /358[23689]/) type = "HOME"; else type = "CELL"; print "TEL;" type ":" numerot[i]; } print "END:VCARD"; }
Tekisin mielelläni saman kalenterille, mutta siinä on muutamia ongelmia: