+1 à Bruno... thunderbird sait le faire en tout cas...
... et je crois qu'il traine des scripts qui font ça sur le net...
je dois avoir ça dans ma bibliothèque... je regarderai à l'occasion...
j'ai tout de même mis le nez dans le script...
je n'ai pas fait toutes les recommandations de Watael mais une partie...
j'ajouterai que j'ai viré deux termes "function" qui sont obsolètes bien que fonctionnels...
#!/bin/env bash à la place de #!/bin/bash
j'ai rétablie les variables en minuscule
j'ai fait un tableau pour CHAMP qui est devenu le_champ (j'ai choisi le saut de ligne mais ça fonctionne avec des espaces)
du coup j'ai commencé l'accès aux éléments de le_champ à 0 et donc termine à 11 au lieu de 12 !
j'ai virer quelques sauts de lignes...
petites
fotes :
'quivous' il manque juste l'espace...
détais => détails
le mail en clair dans le script n'est pas une bonne idée
(et même avec at ou chez, je pense que les robots ont passé ce stade depuis longtemps... mais bon...)
si je ne me trompe il reste la gestion des arguments et awk à voir...
#!/bin/env bash
#==============================================================================
# Ce script a été développé par Jean-Louis NOGUEIRA (jl.nogueira chez gmx.fr)
# Le 2 septembre 2020
# Si vous souhaitez le modifier, l'améliorer, le diffuser vous pouvez
# le faire sans aucune limite.
# Il n'est peut-être pas parfait.
# Je vous demanderais juste de préciser mon nom comme étant celui qui
# a produit ce script initial.
# modification kholo 2020 09 30 000
#==============================================================================
#------------------------------------------------------------------------------
# Entête du fichier cvs :
# firstname;name;NOTE;TELhome;TELcell;TELwork;road;code;town;TITLE;BDAY;MAIL
#
# firstname = Prénom
# name = Nom
# NOTE = Information quelconque
# TELhome = Téléphone domicile
# TELcell = Téléphone portable
# TELwork = Téléphone travail
# road = Rue
# code = Code postal
# town = Ville
# TITLE = Profession
# BDAY = Jour de naissance au format AAAAMMJJ
# MAIL = Adresse eMail
#
# Pour Créer automatiquement cette entête utiliser l'option -c MonFichier.csv
#
# moi@monOrdi$ Convertir_CSV_VCARD -c Monfichier.csv
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Structure du fichier vCard :
# C'est une suite de carte de visite de chaque personne dont le format de
# sortie sera le suivant :
#
# BEGIN:VCARD
# VERSION:4.0
# FN:Jean DUPONT
# TEL;TYPE=home,voice;VALUE=uri:tel:0123456789
# TEL;TYPE=cell,voice;VALUE=uri:tel:0612645678
# TEL;TYPE=work,voice;VALUE=uri:tel:0123456789
# ADR;TYPE=HOME;LABEL="1 rue Machin\n75000 PARIS"
# TITLE:Informaticien
# BDAY:19902501
# MAIL:jean.dupont@gmx.com
# NOTE:Informations divers
# END:VCARD
#
# Pour davantage de détails consulter le site :https://fr.wikipedia.org/wiki/VCard
#------------------------------------------------------------------------------
#------------------------------------
# Définition des CONSTANTES
#------------------------------------
# Les champs
le_separateur=";"
le_champ=(firstname
name
NOTE
TELhome
TELcell
TELwork
road
code
town
TITLE
BDAY
MAIL)
# Les noms des fichiers
csv_file=$2
vcard_file=$3
#----------------
# Afficher l'aide
#----------------
AfficherAide(){
echo -e "\
Ce script de conversion de fichier *.csv en vcard permet :
1) De créer l'entête du fichier CSV qui vous permettra de réaliser (sous
libreoffice ou tout autre logiciel permettant de créer des fichiers excel)
facilement un fichier CSV en utilisant 'Sauvegarder sous' et choisir
format 'csv' avec comme séparateur le caractère ';'.
Dans ce cas il faut indiquer l'option -c suivi du nom du fichier que
vous voulez créer.
exemple : Convertir_CSV_VCARD -c monfichier.csv
2) Lorsque vous avez un fichier CSV conforme au format nécessaire défini
dans ce script, vous pouvez produire un fichier VCARD qui contient tous
les contacts issus de votre fichier CSV.
Pour cela il faut passer l'option -v suivi du nom du fichier CSV et de
votre fichier VCARD que vous voulez créer.
exemple : Convertir_CSV_VCARD -v monfichier.csv mon_fichier_vcard
3) L'option -h passé à ce script affiche l'aide.
Vous pouvez modifier ce programme à votre guise. Pour l'améliorer, l'adapter
ou pour tout autre raison.
"
}
#------------------------------------
# Création de l'entête du fichier CSV
#------------------------------------
CreerEnteteCSV(){
echo "\
${le_champ[0]}$le_separateur\
${le_champ[1]}$le_separateur\
${le_champ[2]}$le_separateur\
${le_champ[3]}$le_separateur\
${le_champ[4]}$le_separateur\
${le_champ[5]}$le_separateur\
${le_champ[6]}$le_separateur\
${le_champ[7]}$le_separateur\
${le_champ[8]}$le_separateur\
${le_champ[9]}$le_separateur\
${le_champ[10]}$le_separateur\
${le_champ[11]}" > ${csv_file}
}
#--------------------------
# Création du fichier VCARD
#--------------------------
CreerVcard(){
n==1
while read line ; do
if [ n == 1 ] ; then
# pour sauter la ligne d'entête
n+=n+1
else
awk -F\; '{print \
"BEGIN:VCARD\n" \
"VERSION:4.0\n" \
"FN:"$1" "$2"\n" \
"TEL;TYPE=home,voice;VALUE=uri:tel:" $4 "\n" \
"TEL;TYPE=cell,voice;VALUE=uri:tel:" $5 "\n" \
"TEL;TYPE=work,voice;VALUE=uri:tel:" $6 "\n" \
"ADR;TYPE=HOME;LABEL="$7 " " $8 " " $9 "\n" \
"TITLE:"$10"\n" \
"BDAY:"$11"\n" \
"MAIL:"$12"\n" \
"NOTE:"$3"\n" \
"END:VCARD"}'
fi
done < ${csv_file} > ${vcard_file}
}
#--------------------
# Programme principal
#--------------------
case "$1" in
-c)
if [ $2 != "" ]; then AfficherAide ;
else CreerEnteteCSV ; fi ;;
-v)
if [ $2 != "" ]; then
if [ $3 != "" ]; then
CreerVcard
else
AfficherAide
fi
else
AfficherAide
fi
;;
-h) AfficherAide ;;
*) AfficherAide ;;
esac
je ne fais pas beaucoup de bash en ce moment mais
on doit pouvoir alléger le print comme ça
for ligne in ${le_champ[@]}
do
out+="$ligne$le_separateur"
done
echo $out
ça ajoute un séparateur de trop...
mais ça montre la préconisation de watael quant aux accolades de trop...