Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/03/2006, à 09:47

alci

[Résolu] Fichiers mdb (access) et script bash

Bonjour,

je doit manipuler sous Ubuntu des fichiers .mdb de façon automatique.

J'ai installé le paquet mdb-tools qui m'offre deux commandes en particulier :
- mdb-tables <fichier.mdb>  : affiche la liste des tables
- mdb-export <fichier.mdb> <table> > exporttable.csv

Je voudrais combiner les deux dans un script bash, mais là je sèche complêtement :

un truc comme :
for fic in *.mdb
do
mdb-tables $fic > tables.txt
sous boucle sur le contenu de tables.txt
mdb-export $fic $table > fic.table.csv
done

Quelqu'un peut m'aider ?

Merci d'avance
Franck

Dernière modification par alci (Le 17/03/2006, à 15:58)

Hors ligne

#2 Le 17/03/2006, à 13:45

LaTheix

Re : [Résolu] Fichiers mdb (access) et script bash

Tu l'as quasiment déjà écrit ton script smile

Essayes un truc du genre:

for base in `ls *.mdb`
  do
    mdb-tables $base > tables.txt
    for tbl in `cat tables.txt`
       do 
          mdb-export $base $tbl > ${base}_${tbl}.csv
       done
    rm -fr tables.txt
  done

Bon, j'ai pas testé le truc .... sans garantie de résultat donc!

Hors ligne

#3 Le 17/03/2006, à 15:57

alci

Re : [Résolu] Fichiers mdb (access) et script bash

Merci !

En fait, j'ai aussi eu quelques problèmes avec les espaces dans les noms de tables...

Alors voici ma solution, un petit script bash :

#!/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)
Merci
Franck

Hors ligne