IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[Shell] import CSV dans une base de données.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut [Shell] import CSV dans une base de données.
    Bonjour,

    J'essaye d'importer un fichier CSV dont les champs sont séparés par des ";" dans une base de donnée postgreSQL.

    Le probleme est que je ne vois pas trop comment réussir à saisir ligne par ligne les données de mon fichier pour ensuite injecter les données tout en respectant la Cast.

    Donc, mon fichier CSV comporte : ID; Nom; Jour; N°jour; Mois; Taille

    et je dois importer ces données dans la table qui contient les colonnes suivantes ( dans l'ordre) : ID (entier), Nom (varchar), Date (timestamp), Taille (entier).

    C'est un vrai casse tête et comme je débute ....

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Pas d'idée ?

    J'ai parcouru le net et je suis tombé sur une source comme ceci :
    Je n'y ai rien changé si ce n'est le nom du fichier et le nom de mes variables, mais apparement il calle apres le "for".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    I=0
    for line in `fichier.csv`
    do
      while read ligne
      do
        VAR3=`echo $ligne | awk -F ";" '{ print $3}'`
        VAR4=`echo $ligne | awk -F ";" '{ print $4}'`
        if [ "$I" -ne 0 ]; then
          psql -U postgres DATABASE -c "INSERT INTO Table (ID, NOM) VALUES (CAST ('$3') AS INTEGER, $4)"
        fi 
      I=`expr I+1`
      done
    done

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    cat fichier.cvs|while read line; do
        VAR3=`echo $ligne | awk -F ";" '{ print $3}'`
        VAR4=`echo $ligne | awk -F ";" '{ print $4}'`
        if [ "$I" -ne 0 ]; 
        then
            psql -U postgres DATABASE -c "INSERT INTO Table (ID, NOM) VALUES (CAST ('$3') AS INTEGER, $4)"
        fi 
        I=`expr I+1`
    done
    je n'ai pas testé à l'intérieur du while mais déjà tu devrais pouvoir rentrer dedans si c'est ça qui n'allait pas.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    il passe bien dans la boucle, mais les variables ne sont pas remplies correctement .

    Si je fais un

    juste apres son initialisation par exemple, il m'affiche une succession de 'blanc' alterner avec une erreur 'invalid input syntax for integer' comme résultat.
    Bien entendu ma base reste vide ^^.

    Comment faire pour que la variable s'initialise correctement ? Ca m'arrive souvent quand j'utilise les variables $1 $2 $3 .... elles ont une durée de vie tres limitée -_-'.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    non c'est bon j'ai trouvé. Probleme de syntaxe, je vais aller m'acheter des lunettes .

    Merci ca marche .

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    Bonjour,

    Désolé de déterrer ce message, mais j'ai à peu de chose près le même problème qu'AngeDéchu.
    J'essaye, via KSH, de lire un fichier CSV (séprateur : ";") et d'associer chaque ligne du fichier à une ligne d'un tableau (cf. exemple ci-dessous).

    Fichier toto.csv :
    blablabla;01/01/2012
    blablabli;01/01/2012
    blablablu;01/01/2012
    blablablo;01/01/2012

    J'aimerai que ce fichier soit donc lu, ligne par ligne, et que les données soient insérées dans un tableau à 2 dimensions.

    Etant débutant en KSH, je me suis totalement inspiré du code d'AngeDéchu comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/ksh
    #Insertion des champs fichier et date dans un tableau
     
    cat toto.csv|while read line; do
        VAR1=`echo $ligne | awk -F ";" '{print $1}'`
        VAR2=`echo $ligne | awk -F ";" '{print $2}'`
        I=`expr I+1`
    done
     
    exit 0
    Dans un premier temps, afin de savoir si mon fichier est bien lu, je désire afficher les valeurs que le awk lit. Cependant, rien ne s'affiche

    Sauriez-vous me dire pourquoi?

    D'avance, merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Importer un fichier csv dans une base de données existante ACCESS
    Par rossy1990 dans le forum Access
    Réponses: 2
    Dernier message: 16/04/2014, 02h38
  2. [MySQL] Import de fichiers CSV dans une base de données
    Par damdam00 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/07/2010, 15h05
  3. [MySQL] Importation d'un csv dans une base de données.
    Par Hotei dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/04/2010, 20h51
  4. [PHP 5.2] Importation fichier CSV dans une base de données
    Par gtraxx dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2010, 15h16
  5. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo