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 :

Caractères spéciaux (débutant) :


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut Caractères spéciaux (débutant) :
    Bonjour ,

    J'ai un nouveau souci avec les chaines de caractères.
    Il se trouve que je veux constituer une commande SQL et lorsque je concatènes les différentes chaines de caractères constituant mon
    odre final dans un fichier : j'ai des sauts de ligne en trop ??

    echo "SELECT $colonnes FROM $table ;" >> REQUETE.sql

    Il se trouve que la variable $colonnes qui tient sur une seule ligne se trouve
    scindée en plusieurs lignes ?

    J'ai ceci par exemple :
    SELECT "COLONNE 1" "
    " || ' ' || "COLONNE2
    " || ' || "COLONNE3
    " || '! !' || "COLONNE4" FROM TALE88
    ";
    EXIT;


    Est ce que quelqu'un aurait déjà rencontré ce problème ?

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    La demande n'est pas claire. Pourquoi n'as-tu pas mis ce que tu obtiens (avec erreur) et ce que tu voudrais avoir. Et surtout, n'oublie pas les balises [ CODE ] et [ /CODE ].
    Je dois faire à peu près la même chose que toi. Voici comment je m'y prends (ça marche correctement).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo "\
    set pages 100;
    set lines 150;
    set head off;
    select
     A.FIELD1 || '$sep' ||
     B.FIELD1 || '$sep' ||
    from
     DB.TABLE_A A,
     DB.TABLE_B B
    where
     B.FIELD1 = A.FIELD2 AND
     A.FIELD3 = 'NAME1';
    exit;" > $workFile.dbRequest

  3. #3
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    Ouai pardon pour les balises , je ne suis pas trés habitué au forum du site

    En fait je me suis mal expliqué

    Je constitue ma requête SQL à partir de plusieurs variables.

    Par exemple j'ai la variable $colonnes qui a la valeur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT "COLONNE 1" "  " || ' ' || "COLONNE2 " || ' || "COLONNE3 "
    Et quand je concatène cette variable dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "SELECT $colonnes  FROM table9 ;" >> sql/REQ_CREATE_EXCEL.sql
    si je vérifie le contenu du fichier ainsi créé (REQ_CREATE_EXCEL.sql) ,
    je me retrouves avec des sauts de lignes : par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT "COLONNE 1
    " "  " || ' ' || "COLONNE2 
    " || ' || "COLONNE3 
    "   
    FROM table9 ;
    Ou peut être je n'ai pas compris ta réponse ?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    C'est parce que "echo" ajoute un retour à la ligne à la fin de ta chaine. Pour ne pas ajouter de retour à la ligne, tu peux faire echo -n "ta chaine" (avec bash et la pluspart des autres shells "gnu") ou bien echo "ta chaine\c" (avec ksh et la pluspart des shells unix traditionels.

    Comme tu le constate, echo n'est pas portable. Si tu veux rester portable, il vaut mieux utiliser printf : printf "%s" "ta chaine"

    Edit : j'ai lu trop vite, je croyais que tu faisais plusieurs echo. Comme dit jmelyn dessous, c'est surement tes variables $colonnes et $table qui contiennent des retour à la ligne.

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Comme le dit matafan, la commande echo est un peu sensible. Néanmoins, je crois que le formatage de la variable colonnes comporte peut-être un défaut. Pour en être sûr, pourrais-tu faire un echo "$colonnes" dans ton script? Fais bien attention de mettre les guillements. Si le résultat est en plusieurs lignes, c'est que l'initialisation de cette variable n'est pas correct.

  6. #6
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    Merci pour ces éléments de réponse.

    En fait quand je fais un echo dans un fichier de la variable , j'ai le texte suivant sans retour à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     "COLONNE1 "  || '! !' || "COLONNE2"  || '! !' || "COLONNE3"

    Ensuite je concatènes le contenu de cette variable avec d'autres
    chaines de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "SET HEAD OFF;" >> requete.sql
    echo "SET FEEDBACK OFF;" >> requete.sql
    echo "SELECT  $requete  FROM $table ORDER BY $order;" >> REQUETE.sql
    Et c'est dans ce fichier final que l'on trouve des sauts de lignes que
    la commande plsql depuis CygWin n'aime pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SET HEAD OFF;
    SET FEEDBACK OFF;
    SET LINESIZE 600;
    SET PAGESIZE 0;
    SELECT   'COLONNE1' || '! !' || "COLONNE2
    "  || '! !' || "COLONNE3"  FROM TABLE1 ORDER BY "COLONNE4
    ";
    En fait ce que je voudrais avoir ce serait l'ordre SELECT en entier jusque au point virgule sur une seule ligne sans retour chariot.

Discussions similaires

  1. Débutant - Problème des caractères spéciaux
    Par powerwave dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/11/2014, 18h29
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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