Forum Astuces.divers [Admin] Traiter des fichiers mdb (Access)

Posté par  (Mastodon) .
Étiquettes : aucune
1
10
nov.
2007
Vous est-il arriver de devoir traiter des fichiers Access sous Linux (pour les importer sous Postgresql par exemple) ? Moi oui, et après avoir un peu galéré, voici ma solution, un petit script bash. Il nécessite le paquet mdb-tools.
#!/bin/sh
IFS=!
for table in `mdb-tables -d ! $1`
do
    echo "Export de la table $1"
    dbname=`echo "$1" | awk -F/ '{print $NF}'`
    mdb-export -d \| "$1" "$table" > "$2/$dbname.$table.csv"
done
J'explique un peu :
  • IFS=! pour fixer le séparateur de champs dans la boucle for (les noms de tables peuvent contenir des espaces, jamais des !)
  • mdb-tables -d ! lui dit justement d'utiliser le ! comme séparateur des noms de tables
  • mdb-export -d | lui dit d'utiliser le | comme séparateur dans le fichier csv. Là ça dépend un peu des données, mais le caractère ',' par défaut ne convient de toute façon pas car la virgule sert aussi de séparateur décimal
  • deux paramètres à passer à la ligne de commande : $1 le nom du fichier mdb à traiter, $2 le répertoire dans lequel je veux sauvegarder mes exports.

On pourrait facilement rajouter sur le même principe un petit mdb-schema pour exporter les schémas de création des tables exportées.
Et pour le lancer sur tout un répertoire :
for fic in rep/*.mdb; do ./export-databse.sh $fic repcsv ; done
Pour la bonne bouche, comme je n'ai pas réussi à lui imposer le caractère décimal et que la commande COPY de postgresql veut un point, je lance :
sed -i s/,/./g repcsv/*.csv
(inconvénient : si vous avec des virgules dans des champs de chaînes de caractères, elles sont aussi remplacées)
Pas si mal, non ?
Franck

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.