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

Langage Perl Discussion :

recherche de variable


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Par défaut recherche de variable
    Bonjour,

    J'ai un fichier dans lequel, je souhaite récupérer la valeur suivante :"Démarrage de la tâche /SAB/(AX_SAUVEGARDE_Delais_4ans)"

    ors la valeur est bien présente dans le fichier, mais via la commande grep, il ne l'a trouve pas. est ce parce que ma variable a rechercher est trop longue.


    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
     
    use strict;
    use warnings;
    use utf8;
    use Carp;
     
    my $FicLog="C:/LOG/20100910__log.txt" ;
     
    $Research_Libelle_Tache = "Démarrage de la tâche /SAB/(AX_SAUVEGARDE_Delais_4ans)";
     
    my @TableauLigne;
     
    open (FIC1, "<$FicLog") || die "Ouverture impossible du fichier $FicLog: $!";	
    binmode FIC1, ":encoding(utf8)";
     
    	while ($Ligne = <FIC1> ) 
       	{  
     
    	    if (grep { $Ligne =~ m/$_/g } ($Research_Libelle_Tache))
      	   { 
     
    		@TableauLigne=split(/\|/,$Ligne);
    		print "toto = $TableauLigne[19]\n";
    	   }		
       	} 
    close (FIC1);
    merci pour votre aide

  2. #2
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    Je pense que l'erreur vient des caractères spéciaux non protégés : les parenthèses et les /

    Je pense qu'en mettant ceci cela devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $Research_Libelle_Tache = "Démarrage de la tâche \\/SAB\\/\\(AX_SAUVEGARDE_Delais_4ans\\)";

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Par défaut
    Effectivement, cela vient bien des protections.

    en fait où je suis embêté, c'est le fait que "/SAB(AX_SAUVEGARDE_Delais_ans)" est le résultat d'une variable ($toto)

    comment puis je faire pour que si dans le résultat de ma variable toto, j'ai des () ou \, alors je mets des protections devant pour que dans la commande suivante, ma variable soit bien interprété.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $Research_Libelle_Tache = "Démarrage de la tâche \\/SAB\\/\\(AX_SAUVEGARDE_Delais_4ans\\)";

  4. #4
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Pour se faire tu peux utiliser la fonction de substitution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $toto =~ s/([\(\)\/])/\\$1/g;
    Ici, les parenthèses et le / seront précédés de \\. On capture le caractère "(" ")" ou "/" avec les parenthèses que l'on remplace par \\ suivi par ce que l'on a capturé ($1).
    Bien sûr si tu as d'autres caractères à protéger il faudra les rajouter.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Pour protéger des caractères vis à vis de leur interprétation par le moteur de regexp, il existe la fonction quotemeta (perldoc -f quotemeta pour le manuel).

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

Discussions similaires

  1. Recherche de variables dans un texte
    Par Victor01 dans le forum Langage
    Réponses: 41
    Dernier message: 13/10/2009, 19h05
  2. Rechercher une variable ou fonction
    Par FoxLeRenard dans le forum Langage
    Réponses: 0
    Dernier message: 13/03/2009, 17h41
  3. Rechercher une variable dans un fichier et..
    Par rikoooo dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 14/11/2008, 21h56
  4. Recherche à 2 variables
    Par Poletto dans le forum Excel
    Réponses: 4
    Dernier message: 21/03/2008, 20h50
  5. Debutant recherche utilisation variable système
    Par agent-zaizai dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/05/2003, 21h53

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