Re: topo sur fichier vcard et répertoire téléphonique.

トップ ページ

このメッセージに返信
著者: anne.guilde@free.fr
日付:  
To: guilde
新しいトピック: Re: topo sur fichier vcardet répertoire téléphonique.
題目: Re: topo sur fichier vcard et répertoire téléphonique.
Le 08/12/2017 à 14:11, anne.guilde@??? a écrit :
>
> # awk -F : ' /^BEGIN|^ |^;|^=|^END|^VERSION|^$|^\s*$/ {next} 1 {print $1
> ; next} ' <Contacts_Anne-1.vcf  | sort | uniq -c   >entree_vcard1
>
>      7
>
>      35 ADR;HOME
>       3 ADR;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
>      10 ADR;HOME;ENCODING=QUOTED-PRINTABLE
>      16 ADR;WORK
>       2 ADR;X-PREF
>       1 ADR;X-PREF;ENCODING=QUOTED-PRINTABLE
>      41 BDAY
>       2 EMAIL;HOME
>       1 EMAIL;PREF
>       3 EMAIL;WORK
>     228 EMAIL;X-Internet
>     441 FN
>     441 N
>      13 NOTE
>       3 NOTE;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
>      25 NOTE;ENCODING=QUOTED-PRINTABLE
>     126 ORG
>       1 ORG;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
>       7 PHOTO;ENCODING=BASE64;JPEG
>       3 TEL;CAR
>     256 TEL;CELL
>     120 TEL;HOME
>       5 TEL;VOICE
>     127 TEL;WORK
>       6 TEL;WORK;FAX
>       5 TITLE
>       2 URL
>       6 X-ANDROID-CUSTOM
>
> C'est déjà mieux


Oui mais à force de bidouiller je me retrouve avec des entrées en double
dans les contacts.

Au départ j'avais des contacts avec le même nom dans mon téléphone portable.

BEGIN:VCARD

VERSION:2.1

N:nom1;prenom1;;;

FN:prenom1 nom1

TEL;X-HomeVoice:+33301020304
TEL;X-CellularVoice:+33601020304
END:VCARD

BEGIN:VCARD

VERSION:2.1

N:nom1;prenom1;;;
FN:prenom1 nom1

TEL;CELL:+33601020305
TEL;HOME;PREF:+33301020304

END:VCARD


J'ai modifié avec pluma (éditeur de texte de mate) le fichier vcf
(VCARD) pour modifier TEL;X-HomeVoice en TEL;HOME... et plein d'autres
entrées.
J'ai importé le fichier vcf de ma debian dans le téléphone portable.

Je ne sais pas ce qui c'est passé quand j'ai rapatrié le fichier dans le
téléphone...

BEGIN:VCARD
VERSION:2.1
N:nom1;prenom1;;;
FN:prenom1 nom1
TEL;HOME:+33301020304
TEL;CELL:+33601020304
TEL;CELL:+33601020305
END:VCARD

Je n'ai plus qu'un contact avec prenom1 nom1 mais j'ai plusieurs entées
avec TEL;CELL

Il fallait que je trouve les contacts qui avaient des entées identiques.
J'ai pondu un programme bash pour cela

----
#!/bin/bash

# set -x

fichier1='Contacts_orig.vcf'
fichier='Contacts_modif.vcf'

# Chaque ligne de fichier1 a cette forme :
# texte1:texte2\r
# \r = retour chariot
# Si la ligne n'est pas de la forme texte1:texte2\r, c'est l'encodage
d'une photo

# j'enlève le retour chariot de chaque ligne du fichier en créant un
nouveau fichier
`tr -d '\r' < $fichier1 > $fichier `

declare -a tableau
debut='- '
debut1='Z '

while read line
do

# Chaque ligne de fichier est de la forme texte1:texte2
    debut_lig=`echo $line | cut -d':' -f 1`
    fin_lig=`echo $line | cut -d':' -f 2`


# BEGIN = dernière linge du contact
# Je crée le premier poste du tableau avec la variable $debut
    if [[ $debut_lig = "BEGIN" ]]  ;     then
        index=0
            tableau=("${tableau[@]}" "$debut")
            let index++
    fi


# END = dernière ligne du contact
    if [[ $debut_lig = "END" ]] ;     then
        echo ${tableau[@]}
        unset tableau
    fi


# Analyse les lignes entre BEGIN et END
    if  [[ $debut_lig != "BEGIN" ]] && [[ $debut_lig != "END" ]]  ;    then
# je récupère que les lignes de la forme texte1:texte2
        if [[ ${line} == *":"* ]] ; then
            taille_tab="$index"
            poste=0
            while (($poste < $taille_tab))
            do
# Si la valeur existe c'est qu'il y a plusieurs entrées avec le même nom
# par exemple  Z VERSION N nom_contact;prenom_contact;;; FN TEL;HOME 
TEL;CELL TEL;CELL TEL
# j'ai plusieurs TEL;CELL dans le tableau : je mets un Z dans le premier 
poste du tableau pour repérage
                if [[ "${tableau[$poste]}" == "$debut_lig" ]] ; then
                    tableau[0]="$debut1"
                fi
                let poste++
            done
# Ajout de l'entrée dans le tableau
            tableau=("${tableau[@]}" "$debut_lig")
            let index++
# Si l'entrée = N, c'est le nom du contact. J'ajoute le nom au tableau 
pour pouvoir modifier dans le téléphone portable
            if [[ $debut_lig = "N" ]]  ;     then
                tableau=("${tableau[@]}" "$fin_lig")
                let index++
            fi
        fi    
    fi


done < $fichier
----

Maintenant je connais les contacts à modifier avant de les réimporter du
téléphone portable dans le pc

Anne