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 :

[Shell] Chercher une chaine dans un texte


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut [Shell] Chercher une chaine dans un texte
    Bonjour,
    Mon problème est comme suit :
    J'ai un fichier "test" dans lequel je voudrai chercher une chaine exacte entrée par l'utilisateur .
    Le fichier test est comme suit :
    ch=a.chaine1,b.chaine2
    ch1=a.chaine1,b.chaine2
    etc...

    Le script doit pouvoir localalisée par ex la chaine "chaine1" entrée par l'utilisateur et l'afficher entièrement "a.chaine1".
    Si l'utilisateur entre par exemple "chai" le script rend une réponse négative.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par samtgr Voir le message
    Bonjour,
    Mon problème est comme suit :
    J'ai un fichier "test" dans lequel je voudrai chercher une chaine exacte entrée par l'utilisateur .
    Le fichier test est comme suit :
    ch=a.chaine1,b.chaine2
    ch1=a.chaine1,b.chaine2
    etc...

    Le script doit pouvoir localalisée par ex la chaine "chaine1" entrée par l'utilisateur et l'afficher entièrement "a.chaine1".
    Si l'utilisateur entre par exemple "chai" le script rend une réponse négative.

    Merci d'avance
    Faut donc que tu utilises le "." et la virgule pour délimiter tes chaînes...
    Bon, déjà la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lig=`sed -e "s/$/,/" test |grep "\.txt,"`
    te remplit la variable "lig" avec la ligne qui contient la chaine "txt" incluse entre un point et une virgule ou te donne une variable "lig" vide si la chaine ".txt," n'y est pas; le sed initial servant à mettre artificiellement une virgule à chaque ligne du fichier ce qui évite de gérer le cas particulier "texte en fin de ligne".
    A partir de là, je pense que tu peux t'en sortir...

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour
    Et si jamais l'utilisateur rentre "a.chaine1" ou encore "chaine2" qui n'est pas suivi de virgule?!
    il y a deux problèmes, j'avais pensé à sed mais le problème c la première chaine qui est délimitée par "=" et/ou non ","
    Ex :
    ch peut être sur les formes suivantes :
    ch=a.chaine1
    ch=a.chaine1,b.chaine2
    ch=a.chaine1,b.chaine2,chaine3...

    Merci d'avance pour ton aide

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par samtgr Voir le message
    Bonjour
    Et si jamais l'utilisateur rentre "a.chaine1" ou encore "chaine2" qui n'est pas suivi de virgule?!
    il y a deux problèmes, j'avais pensé à sed mais le problème c la première chaine qui est délimitée par "=" et/ou non ","
    Ex :
    ch peut être sur les formes suivantes :
    ch=a.chaine1
    ch=a.chaine1,b.chaine2
    ch=a.chaine1,b.chaine2,chaine3...

    Merci d'avance pour ton aide
    Ouaip. Autant faire un truc à la mano qui parses ton fichier pour en extraire les chaines. Ce sera un peu plus long mais je vois pas comment faire autrement
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/bin/sh
    exec 3<test
     
    while read ligne 0<&3
    do
        string=`echo $ligne |cut -f2- -d=`    # string contient tout ce qu'il y a après le "="
     
        # Découpage de la chaine sur le ","
        old="$IFS"
        IFS=","
        set $string
        IFS="$old"
     
        # Maintenant on a chaque chaine dans $1, $2, ...
        for mot in $*
        do
            # Si le mot contient un "." comme a.xxx
            if echo $mot |grep "\." 1>/dev/null
            then
                 # On l'enlève
                 mot=`echo $mot |cut -f2- -d.`
            fi
     
            # Maintenant "$mot" ne contient que la chaine
            if test "$mot" = "ce que tu cherches"
            then
                 echo $ligne
            fi
        done
    done
    Bon, un peu grossier comme code mais là j'ai pas trop le temps. C'est juste pour donner une idée du truc. Bien entendu j'ai tapé ce code en considérant qu'aucune chaine ne pouvait avoir d'espace (sinon le for ne marchera pas)....

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Résolu
    Merci pour ton aide ça marche

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

Discussions similaires

  1. Comment chercher une chaine dans une autre VB.NET?
    Par tssi555 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/09/2008, 15h20
  2. Chercher une chaine dans une base Access
    Par rouinisaif dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/05/2008, 21h33
  3. chercher une date dans un texte en Langage C
    Par dadou9101 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/01/2008, 17h35
  4. algorithme pour chercher une phrase dans un texte
    Par kha_yassine dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 22/06/2007, 22h24
  5. chercher une chaine dans un fichier
    Par bwwilly dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2007, 15h03

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