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

Linux Discussion :

[KSH] Extraire une chaine d'un fichier contenant une variable


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 28
    Points
    28
    Par défaut [KSH] Extraire une chaine d'un fichier contenant une variable
    Bonjour,

    Je suis actuellement en train de développer un script KSH sous HP-UX.

    Une question me tarode, et j'aimerai vous en faire part.

    J'ai 2 fichiers, mon script KSH et un fichier "référence" qui fait office de base de connaissance et chaque ligne est identifiée par un ID

    Fichier reference
    1; Ceci est mon premier message
    2; Erreur, $PLOP est absent


    Déroulement de mon script

    1. $PLOP est définie dans le main de mon script
    2. Je lance un parse sur l'id en parcourant mon fichier référence
    3. Je récupère la ligne qui m'intéresse, et je récupère bien la chaine associée
    4. La chaine est mis en variable : MESSAGE=Erreur, $PLOP est absent


    Existe t'il une méthode particulière pour remplacer dans la chaine récupérée le $PLOP par la valeur du main ?

    (Une solution me vient à l'idée, un remplacement avec SED ?, y a t'il une solution plus viable ?)

    Je vous remercie d'avance pour vos réponses.

    Cordialement,

    Mickaël.

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Après que ta variable $PLOPT est valorisée, il te suffit d'écrite la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MESSAGE=$(eval echo $MESSAGE)
    Explication : man eval
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Merci BlaireauOne ! effectivement, je n'avais pas fais attention à cette commande eval. Il remplace très proprement la variable dans la chaine récupérée. Parfait !

    Néanmoins, il en oublie les quotes. Je recherche du côté des arguments d'eval, rien de bien concluant, et j'ai essayé de proteger avec des back-slash les quotes, mais toujours la même chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DSQUERY='plopinou'
     
    echo "AVANT : $MESSAGE"
    MESSAGE=$(eval echo $MESSAGE)
    echo "APRES : $MESSAGE"
    Voici le resultat.
    AVANT : Variable "$DSQUERY" n'est ni renseignee via l'argument -S, ni via les variables d'environnement.
    APRES : Variable plopinou nest ni renseignee via largument -S, ni via les variables denvironnement.

    As-tu déjà eu le cas ?

    EDIT 1ère édition

    Je test également d'eval des requêtes SQL.

    ça s'exécute très bien quand j'ai une requête du type

    [sql]
    sp_helpdb
    go
    [/sql]

    mais lorsque j'ai une requête SQL avec '(' et que j'essaye de l'eval, ça me fait l'erreur.

    execSQL[16]: syntax error at line 1 : `(' unexpected

    Avez vous des pistes, en dehors de parser le fichier en amont ?

    EDIT 2nde édition

    Bon j'ai décidé d'utiliser SED pour parser mon fichier SQL contenant les variables $BASE et autres et j'en ai fait une petite fonction pour ensuite attaquer directement le nouveau fichier.

    Pour ceux que ça intéressé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    # Parse du fichier sqlcmd
    # Ceci permettant le remplacement des variables type : $BASE, etc...
    # use : parseSQLCmd
    parseSQLCmd()
    {
    	RESULT_PARSESQLCMD=3
     
    	`sed -e s/'$BASE'/"$BASE"/g fichierAParser > fichierResultat`
     
    	if [ -s fichierResultat ]
    	then
    		RESULT_PARSESQLCMD=0
    	fi
     
    	return $RESULT_PARSESQLCMD
    }
    Merci quand même pour vos réponses ;-)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  2. Réponses: 1
    Dernier message: 22/04/2009, 22h39
  3. extraire le nom d'un fichier dans une chaine sauf le car -
    Par digger dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/12/2005, 00h02
  4. Trouver un fichier contenant une chaine ?
    Par narmataru dans le forum Linux
    Réponses: 2
    Dernier message: 29/04/2004, 10h49

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