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 :

problème de séparateurs dans un script sql


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Points : 42
    Points
    42
    Par défaut problème de séparateurs dans un script sql
    bonjour,
    j'ai déjà posté ma question dans le forum du langage sql: http://www.developpez.net/forums/sho...=1#post3354007
    mais ils y a quelques amis qui m'ont conseillés de poster ici car il ya des vrai experts
    j'ai généré un script sql à l'aide de l'outil SQLManagerX, et ca dans le but de migrer mes données de H/F vers MySQL.
    ce script contient l'ensemble des requêtes qui vont me permettre d'importer les données de H/F vers ma nouvelle base dans Mysql.
    lorsque j'exeute le script dans PHPMyAdmin,il me génère une erreur :"parenthèse fermente manquante".
    voici une parti du code de mon script:
    Code :

    INSERT INTO C_Expedition (ExpNum,TransNum,ExpDate,CréeLe,CréePar,ExpCommentaire,MagCode,ExpNumBord)
    VALUES (4 , 4 , '20080614' , '20080604' , '' , 'la tournée n'a pas été enregistrée' , 'PRINCIPAL' , 865432 );

    donc il considère l'apostrophe du contenu d'un champs de ma table comme étant un séparateur entre les champs de données et non pas une apostrophe.
    notre ami pacmann m'a proposé cette solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\'/\'\'/g' TonFichier.sql |sed -e 's/\(,\ \{1,\}\)\'\'/\1\'/g' |sed -e 's/\'\'\(\ \{1,\},\)/\1\'/g'
    mais je sais pas exactement comment la manipuler selon mes besoins?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Je ne connaissais pas le doublement de quote pour protéger un simple guillemet dans une chaîne mais ça a l'air de fonctionner également. Je l'aurais plutôt échappée plus classiquement avec un backslash.

    Pour le doublement du guillemet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # avec l'option -r pour regex étendues
    sed -r "s/([A-Z])'([A-Z])/\1''\2/i" ton-fichier
     
    # sans regex étendues
    sed  "s/\([A-Z]\)'\([A-Z]\)/\1''\2/i" ton-fichier
    Pour l'échappement du guillemet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # avec l'option -r pour regex étendues
    sed -r "s/([A-Z])'([A-Z])/\1\\\'\2/i" ton-fichier
     
    # sans regex étendues
    sed  "s/\([A-Z]\)'\([A-Z]\)/\1\\\'\2/i" ton-fichier
    [A-Z]'[A-Z] est un motif de regex qui donnera une concordance pour tout caractère alpha suivi d'un guillemet suivi d'un autre caractère alpha.

    Les parenthèses ([A-Z]) capturent le caractère et la référence arrière \1 la rappelle dans le groupe de remplacement de sed.

    L'option i dans s/motif-a-remplacer/remplacement/i rend le motif de la regex insensible à la casse.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Points : 42
    Points
    42
    Par défaut
    salut

    ca a marché, merci infiniment, mais j'ai encore 2 autres questions Mr ripat:
    1- j'ai pas bien compris le concept ou l'utilité de l'option -r ?
    2- la ligne de commande que vous m'avez donnée fonctionne à merveille, mais elle n'apporte pas la modification au fichier traité, parce que quand j'ai exécuté "sed ..." elle m'a affiché le résultat modifié en bas de la fenêtre de Cygwin, par contre le script que je manipule n'a pas été touché, je l'ai ouvert après, mais j'ai remarqué qu'il n' a pas été touché !!
    comment je peux apporter les modifications au script sans passé par du copier coller ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par foulla Voir le message
    ca a marché, merci infiniment, mais j'ai encore 2 autres questions Mr ripat:
    1- j'ai pas bien compris le concept ou l'utilité de l'option -r ?
    Globalement, cette option permet d'éviter l'usage des backslashes pour les motifs de regex. Cette option rend les regex plus lisibles.

    Citation Envoyé par foulla Voir le message
    2- la ligne de commande que vous m'avez donnée fonctionne à merveille, mais elle n'apporte pas la modification au fichier traité, parce que quand j'ai exécuté "sed ..." elle m'a affiché le résultat modifié en bas de la fenêtre de Cygwin, par contre le script que je manipule n'a pas été touché, je l'ai ouvert après, mais j'ai remarqué qu'il n' a pas été touché !!
    comment je peux apporter les modifications au script sans passé par du copier coller ?
    Soit tu rediriges la sortie vers un nouveau fichier (méthode prudente):
    sed 's/motif/remplacement/gi' fichier > nouveau.fichier

    Soit tu modifies directement le fichier avec option -i (prudence! faire copie de sauvegarde avant)
    sed -i 's/motif/remplacement/gi' fichier

    A la relecture de mon post ci-dessus, il serait aussi indiqué d'ajouter l'option g derrière l'expression sed pour faire un remplacement global (toutes les occurrences)

    sed 's/motif/remplacement/gi

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Points : 42
    Points
    42
    Par défaut
    ça marche merci bcp

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

Discussions similaires

  1. problème de séparateurs dans un script sql
    Par foulla dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/06/2008, 11h18
  2. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 09h29
  3. Msg 2714 (objet deja existant) dans un script SQL Server
    Par Makrier dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/11/2006, 12h40
  4. problème de guillemets dans un parametre SQL
    Par Pitou5464 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/08/2006, 21h56
  5. [MySQL] Problème de pagination dans un script.
    Par Scurz dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/08/2006, 13h47

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