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] CSV import , caractères spéciaux


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] CSV import , caractères spéciaux
    Bonjour,

    J'essaye toujours d'importer des fichiers csv dans une base de données.
    J'ai un probleme quand une ligne de mon fichier contient le caractère ' ou ; .
    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <b>font color='red' ...
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pvit.listPVToDisplay; 702;701;10114;703....

    En effet le " ' " est utilisé dans la ligne de commande qui envoie les variables dans la base de données et il les interprete donc lorsqu'une ligne en contient...

    Le ; est mon séparateur de champs et au lieu d'envoyer par exemple la ligne : "701;10114;702" , il envoie "701" uniquement .

    Dois je faire préalablement une reconstruction du fichier en remplaçant ces 2 caractères spéciaux par autre chose ou bien puis-je les préserver avec une méthode ? (Normalement je ne peux pas toucher aux données).

    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
    Bon j'ai reconverti le fichier en utilisant des separateurs " | " au lieu des " ; ".

    Ca a l'air de regler un des deux problemes.

    Par contre je ne vois vraiment pas pour le single quote ....

  3. #3
    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
    Pour apporter plus de précision je vous donne le code que j'utilise pour importer le fichier en question dans ma BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cat fichier.csv | while read line; do
      VAR1=`echo $line | awk -F "|" '{ print $1}'`
      VAR2=`echo $line | awk -F "|" '{ print $2}'`
      SQL="INSERT INTO kv (kv_name, kv_val) VALUES ('$VAR1', '$VAR2');"
      echo $SQL >> tmpfile1.csv
    done
     
    psql -U utilisateur BaseDeDonnée < tmpfile1.csv
    Le probleme est au niveau des " ' " obligatoires sur $VAR1 et VAR2...

  4. #4
    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
    Peux tu donner un exemple de lignes de ton fichier csv stp pour que l'on se rende encore mieux compte de ce que tu dois faire et ce que tu souhaites récupérer.

    merci

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    .
    .
    .
     pvit.searchHowLongBefore| 0
     planning.activeFiltre| true
     planning.debug_| 9424
     pvit.listPVToDisplay| 702;701;10114;703;710;10116;10117;700
     pvit.newPVIT| true
     planning.deleteDelay| 0
     planning.blockAdministrationDelay| 0
     planning.blockAdministration| true
     shutdown.message| Le serveur sera arrêté à 14h30 pendant 5 minutes
     shutdown.messageWB| <b><font color ='red'>Arrêt imminent du serveur à* 14h30 pendant 5 minutes.</font></b>
    Voici quelques lignes avec "la" ligne qui bloque ma moulinette.
    Il n'aime pas le 'red' sans doute à cause que la quote de cette ligne ferme prématurement la quote du '$VAR2'...
    Et je ne vois pas comment l'eviter .

  6. #6
    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
    alors j'ai repris ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cat fichier.cvs|while read line; do
      VAR1=`echo $line|awk -F"|" '{print $1}'`
      VAR2=`echo $line | awk -F"|" '{print $2}'`
      SQL="INSERT INTO kv (kv_name, kv_val) VALUES ('$VAR1', '$VAR2');"
      echo $SQL >> tmpfile1.csv
    done
    a la différence que je n'ai pas mis d'espace entre -F et "|" (normalement il n'y en a pas, en tout cas moi je n'en mets jamais)

    et voila ce que je trouve dans tmpfile1.csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INSERT INTO kv (kv_name, kv_val) VALUES ('pvit.searchHowLongBefore', '0');
    INSERT INTO kv (kv_name, kv_val) VALUES ('planning.activeFiltre', 'true');
    INSERT INTO kv (kv_name, kv_val) VALUES ('planning.debug_', '9424');
    INSERT INTO kv (kv_name, kv_val) VALUES ('pvit.listPVToDisplay', '702;701;10114;703;710;10116;10117;700');
    INSERT INTO kv (kv_name, kv_val) VALUES ('pvit.newPVIT', 'true');
    INSERT INTO kv (kv_name, kv_val) VALUES ('planning.deleteDelay', '0');
    INSERT INTO kv (kv_name, kv_val) VALUES ('planning.blockAdministrationDelay', '0');
    INSERT INTO kv (kv_name, kv_val) VALUES ('planning.blockAdministration', 'true');
    INSERT INTO kv (kv_name, kv_val) VALUES ('shutdown.message', 'Le serveur sera arrêté à 14h30 pendant 5 minutes');
    INSERT INTO kv (kv_name, kv_val) VALUES ('shutdown.messageWB', '<b><font color ='red'>Arrêt imminent du serveur à* 14h30 pendant 5 minutes.</font></b>');
    je n'ai pas eu de problème avec 'red' comme toi, donc est-ce que cela devrait te donner ceci??

    ou alors est-ce que le problème ne vient que lors de ton import de ton fichier dans la base??

  7. #7
    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
    C'est lors de l'injection des données dans la base que ca plante ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psql -U utilisateur BaseDeDonnée < tmpfile1.csv
    Le fichier en lui meme est correct.

    il contient une série de fois cette instruction ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO key_value (kv_name, kv_value, id_import) VALUES ('$VAR1', '$VAR2');
    On a donc ceci pour la ligne qui plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO key_value (kv_name, kv_value, id_import) VALUES ('shutdown.messageWB', '<b><font color ='red'>');
    En rouge la quote qui gene le tout et en vert la quote qui fait partie de la requete .

    Je pense que c'est plus explicite comme cela ^^.

  8. #8
    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
    ok c'est bien ce que je pensais après.

    alors normalement pour ne pas prendre en compte le caractère spécial ' tu devrais mettre \ devant mais je ne sais pas du tout si cela va fonctionner par la suite.

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

Discussions similaires

  1. Extraction csv et caractères spéciaux
    Par pop_up dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 15/03/2013, 17h23
  2. [MySQL] Encodage caractères spéciaux après import csv
    Par snorky94 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/10/2012, 15h27
  3. [Encodage] Exporter un CSV avec caractères spéciaux pour Excel
    Par gwinyam dans le forum Langage
    Réponses: 10
    Dernier message: 22/02/2011, 11h44
  4. Caractères "spéciaux" - problème d'import csv
    Par subarud dans le forum SAS Base
    Réponses: 0
    Dernier message: 15/06/2009, 12h02
  5. [MySQL] import CSV et caractères spéciaux
    Par loganblack dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/04/2008, 22h55

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