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 :

Couper une chaine de caractère


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Par défaut Couper une chaine de caractère
    Bonjour,

    Je dois lire un fichier et récupérer une partie du texte de chaque ligne.

    La ligne peut être de la forme:

    Line1 Time("10:20:00") Parametre("1";"2")
    Line1 Time("10:20:00")
    Line1 Parametre("1";"2")
    Il me faut récupérer le texte entre parenthèse à chaque fois.
    J'ai essayé avec CUT mais n'y arrive pas. Il me faut mettre le résultat dans 2 variables, $TIME et $PAR.

    Savez vous comment je peux récupérer dans ces variables les valeur correspondante???

    Merci d'avance
    Mat

  2. #2
    Membre émérite 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
    Par défaut
    Citation Envoyé par Matmal11
    Il me faut récupérer le texte entre parenthèse à chaque fois.
    J'ai essayé avec CUT mais n'y arrive pas. Il me faut mettre le résultat dans 2 variables, $TIME et $PAR.
    Mat

    Nota : ne fonctionne qu'en shell bash

    http://www.shellunix.com/regexp.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/bash
     
    while read line ; do
    	TIME=`echo $line | grep -o '"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]"'`
    	PAR=`echo $line | grep -o '"[0-9]";"[0-9]"'`
    	echo "* TIME : $TIME - PAR : $PAR"
    done < test.txt

    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    * TIME : "10:20:00" - PAR : "1";"2"
    * TIME : "10:20:00" - PAR :
    * TIME :  - PAR : "1";"2"

  3. #3
    Membre confirmé Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Par défaut
    J'ai oublié de préciser quelquechose.
    Dans la variable TIME je peux avoir 1 ou 2 valeurs:
    Time("10:00:00")
    ==> $TIME = "10:00:00"

    Time("10:00:00";"11:00:00")
    ==> $TIME = "10:00:00";"11:00:00"
    Et pour les paramètres, je peux avoir de 1 a n valeurs entre guillemets:

    Parametre("1")
    ==> $PAR = "1"

    Parametre("1";"2"...;"n")
    ==> $PAR = "1";"2"...;"n"
    Je ne crois pas que ta solution prenne tous les cas en compte.
    As-tu une autre solution???

  4. #4
    Membre émérite 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
    Par défaut
    Citation Envoyé par Matmal11
    J'ai oublié de préciser quelquechose.
    Dans la variable TIME je peux avoir 1 ou 2 valeurs:
    Et pour les paramètres, je peux avoir de 1 a n valeurs entre guillemets:

    2ème et dernier essai

    http://www.shellunix.com/regexp.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    while read line ; do
    	if [[ `echo $line | grep -c Time` -eq 0 ]] ; then
    		TIME=""
    	else
    		TIME=`echo $line | sed -e "s/^.*Time(//" -e "s/).*$//"`
    	fi
    	if [[ `echo $line | grep -c Parametre` -eq 0 ]] ; then
    		PAR=''
    	else
    		PAR=`echo $line | sed -e "s/^.*Parametre(//" -e "s/).*$//"`
    	fi
    	echo "* TIME : $TIME - PAR : $PAR"
    done < test.txt

  5. #5
    Membre confirmé Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Par défaut
    Merci beaucoup, ca marche nickel ton truc.

    @++

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

Discussions similaires

  1. Couper une chaine de caractères
    Par Jordmund dans le forum VBA Access
    Réponses: 4
    Dernier message: 24/01/2008, 22h11
  2. couper une chaine de caractère
    Par greg26 dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/10/2007, 15h11
  3. couper une chaine de caractère en deux ?
    Par fmh1982 dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2007, 18h17
  4. Couper une chaine de caractères
    Par perldebutant dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2006, 00h06
  5. Couper une chaine de caractère
    Par Spacio dans le forum Access
    Réponses: 2
    Dernier message: 28/06/2006, 18h06

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