Accéder au contenu.
Menu Sympa

fr - [sympa-fr] constructeur XML à partir d'un fichier CSV

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Vu Ngoc VU <adresse@cachée>
  • To: adresse@cachée
  • Subject: [sympa-fr] constructeur XML à partir d'un fichier CSV
  • Date: Thu, 4 Oct 2012 15:52:28 +0200

bonjour,

comme je me suis mis aux familles et que j'en avais un peu assez de remplir
les fichiers XML,
j'ai écrit un script.

Bon, ok :
- il n'y a pas de contrôle sur la validité du CSV en entrée ;
- je ne vérifie pas non plus si le fichier XML existe déjà avant de l'écraser
- on pourrait donner des arguments au script
etc...

Mais pour l'instant, je ne me suis concentré que sur la logique de la
"boucle".

Vos critiques sont les bienvenues.
Peut-être qu'il existe déjà un outil pour faire ce travail ?
Si c'est le cas, je compte sur vous pour me l'indiquer :)
J'avais aussi un peu joué avec csvtool...

le config.tt2 est encore écrit à la main pour l'instant.
Je trouve cette étape pas trop fastidieuse comparé à la génération à
l'écriture des XML à la main.



#!/bin/sh

#----------------------------------
# purpose :
# trying to handle named columns
# in CSV files
# with awk
# to build XML file
# for SYMPA families instanciation
#----------------------------------

## example of some lines of the CSV file :
# listname;contact_email;contact_gecos;contact_info
# list1;adresse@cachée;Full Name1;about contact1
# list2;adresse@cachée;Full Name2;about contact2
# list3;adresse@cachée;Full Name3;about contact3

# the file we read in
CSV_FILE=path/to/your/file.csv

# the file we write out
XML_FILE="$(dirname $CSV_FILE)/$(basename $CSV_FILE .csv ).xml"

echo "\$XML_FILE : $XML_FILE"

# fields separator
DELIM=";"

awk '
BEGIN {
FS="'$DELIM'"
print "<?xml version=\"1.0\" ?>"
print " <family>"
}

# 1st line contains headers (named columns)
NR == 1 {
split($0,fields,"'$DELIM'")
}

# print XML tags for others lines (2..EOF)
NR != 1 {
print " <list>"
split($0,values,"'$DELIM'")
for (v in values)
print " <"fields[v]">"values[v]"<"fields[v]">"
print " </list>"
}

END {
print "</family>"
}
' $CSV_FILE > $XML_FILE




Archives gérées par MHonArc 2.6.19+.

Haut de le page