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 :

Retours chariots fin de variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Retours chariots fin de variable
    Bonjour à tous.

    J'ai une chaîne de caractère récupérée en BDD :

    J'ai une fonction remetVariables, qui me permet de sortir ma chaîne en remplaçant certaines valeurs dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function remetVariables
    {
    	STRING=`echo "$1" | sed "s/#/\n/g"`
    	STRING=$(echo "${STRING//'$NAS'/$NAS}")
    	STRING=$(echo "${STRING//'$3'/$3}")
    	STRING=$(echo "${STRING//'$4'/$4}")
    	echo "$STRING"
    }
    Et j'appelle cette fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEXTE=$(remetVariables "$S" null chaine caractere)
    Le souci c'est que maintenant les retours charriots en fin de variable sont perdus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bash-3.2$ echo "$TEXTE"
     
    ma chaine
     
    de caractere
    bash-3.2$
    Moi j'aimerais qu'il les gardent !! Comment faire svp ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Bonjour,

    c'est l'opérateur $() ou `` qui fait disparaître tes retours à la lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function remetVariables
    {
    	STRING=$(echo "${STRING//'$NAS'/$NAS}")
    	STRING=$(echo "${STRING//'$3'/$3}")
    	STRING=$(echo "${STRING//'$4'/$4}")
            sed "s/#/\n/g" <<< "$STRING""
    }
    (non testé, pour des raisons évidentes)

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci, en effet j'ai bien vu que le souci venait de là.
    Mais j'ai quand même besoin de faire une redirection dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TEXTE=$(remetVariables "$S" null chaine caractere)
    Comment contourner dans ce cas me $() / `` ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    As-tu essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TEXTE="$(remetVariables "$S" null chaine caractere)"

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 400
    Par défaut
    Bonjour,
    Déjà, il faudrait corriger les autres erreurs, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function remetVariables
    {
    	#Pour remplacer la partie sed, ici on utilise le echo -e pour interpréter le "\n"
    	STRING=$(echo -e "${1//#/\n}")
    	#Pas besoin de echo sauf si tu dois interpréter des caractère d échappement ("\t","\n",..) et dans ce cas ne pas oublier le '-e'    
    	STRING="${STRING//\$NAS/$NAS}"
    	STRING="${STRING//\$3/$3}"
    	STRING="${STRING//\$4/$4}"
    	echo "$STRING"
    }
    J'ai aussi remplacé les '$NAS' '$3' '$4' par \$NAS \$3 \$4 car je suppose que ton but est de remplacer par exemple la chaine "$3" par la valeur de la variable $3, ce qui ne se faisait pas avec la syntaxe initial (le simple quote dans une chaine de caractère n'est qu'un simple caractère).

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci jack, mais même chose,
    Disedorgue, si je mets ta fonction voici le résultat, pas d'espace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bash-3.2$ remetVariables "$S" null chaine caractere
     
    ma chaine
     
    de caractere
    bash-3.2$

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Es-tu sûr que ta chaîne S finit par 2 croisillons?

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 703
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 703
    Par défaut
    il n'y a semble-t-il pas de solution : la substitution de commande "bouffe" les multiples retours à la ligne finaux.

    un contournement consisterait à ajouter un caractère pas, ou peu, utilisé (§ par exemple), et de le supprimer après la dernière substitution de commande.
    ???

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

Discussions similaires

  1. retour chariot fin de fichier
    Par vince2005 dans le forum Langage
    Réponses: 11
    Dernier message: 16/04/2014, 02h11
  2. Réponses: 2
    Dernier message: 08/07/2011, 11h01
  3. [PHP 5.3] Un retour chariot dans une variable
    Par Ottakar dans le forum Langage
    Réponses: 9
    Dernier message: 01/11/2010, 23h40
  4. Détecter le retour chariot d'une variable post
    Par keub51 dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2007, 18h05
  5. Retour chariot appliquée à une variable
    Par denis finch dans le forum Langage
    Réponses: 4
    Dernier message: 14/12/2005, 13h07

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