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 du Club 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
    Points : 50
    Points
    50
    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 é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
    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 du Club 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
    Points : 50
    Points
    50
    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 é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
    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 du Club 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
    Points : 50
    Points
    50
    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