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 :

Perl- probléme d'extraction de chaine de caractères


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Perl- probléme d'extraction de chaine de caractères
    Bonjour à tous,

    voici mon problème j'ai deux fichiers, l'un est compose de ce si "info1+BAUER+Romain+rbauer+Xgum9Th7p" (il y a +/-50ligne comme sa)
    et l'autre +/- la même chose
    "Gregory*CRANSFELD*gcransfe*ocP2rPfv6*a ajouter dans le groupe info1"

    dans le cas du 1er fichier j'arrive très bien à extraire la chaine et à mettre les différents mots dans des variable et a les afficher
    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
    #! /usr/bin/perl
    use strict; 
     
    my $prenom; 
    my $nom; 
    my $groupe;
    my $pass;
    my $login;
    my $erreur;
     
    open (FHANDLE, "<liste-user2.txt") or die "Fichier non trouve \n" ;
     
    $erreur=0;
     
    while (<FHANDLE>)
    {
    	chomp;
     
    	if($_ !="#")
    	{		
    		# groupe+NOM+prenom+login+pass
    		# prenom*NOM*login*pass*groupe
    		if ( $_ =~ /^\s*(.*)[+](.*)[+](.*)[+](.*)[+](.*)$/)
    		{			
    			print("$1*$2*$3*$4*$5\n");
     
    		}
    	}
    }
    close (FHANDLE);
    par contre pour le 2e fichier j'ai juste remplacé dans mon code les "+" par des "*"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_ =~ /^\s*(.*)[+](.*)[+](.*)[+](.*)[+](.*)$/
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_ =~ /^\s*(.*)[*](.*)[*](.*)[*](.*)[*](.*)$/
    et la il ne m'afficher plus rien.

    Quelqu'un aurai t'il une solution svp

    Merci d'avance a tous

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par shad797 Voir le message
    par contre pour le 2e fichier j'ai juste remplacé dans mon code les "+" par des "*"
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $_ =~ m/^\s*(.*?)\*(.*?)\*(.*?)\*(.*?)\*(.*)$/)

    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
    31
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    my $prenom; 
    my $nom; 
    my $groupe;
    my $pass;
    my $login;
    my $erreur = 0;
     
    open my $f_handle, "<liste-user2.txt", or die $_ ;
     
     
    while (<$f_handle>)
    {
     
    	if($_ ne "#")
    	{		
    		# groupe+NOM+prenom+login+pass
    		# prenom*NOM*login*pass*groupe
    		if ( $_ =~ m/^\s*(.*?)\*(.*?)\*(.*?)\*(.*?)\*(.*)$/)
    		{			
    			print("$1*$2*$3*$4*$5\n");
     
    		}
    	}
    }
    close $f_handle;
    Il est préférable d'ouvrir le fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $f_handle, "<liste-user2.txt", or die $_ ;

    '!=' implique une comparaison numérique, il faut utiliser 'ne' dans ton cas, voire '!~'.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Bonjour,

    Dans les regexp les caractères * et + sont réservés :
    * : 0 ou x fois
    + : au moins une fois
    Donc pour les utiliser dans ton cas du devrait les échapper: \* et \+
    Regarde peut-etre la fonction split qui peut être util.

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par psylox Voir le message
    Bonjour,

    Dans les regexp les caractères * et + sont réservés :
    * : 0 ou x fois
    + : au moins une fois
    Donc pour les utiliser dans ton cas du devrait les échapper: \* et \+
    Regarde peut-etre la fonction split qui peut être util.
    Utiliser [+] comme il le fait est également une solution même si c'est moins joli.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_ =~ /^\s*(.*)[+](.*)[+](.*)[+](.*)[+](.*)$/

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous et merci pour vos solutions qui fonction très bien merci encore a vous

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

Discussions similaires

  1. Extraction de chaine de caractères
    Par asterix76-rouen dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 23h17
  2. [Perl] Problème de remplacement de chaine de caractères
    Par LE NEINDRE dans le forum Langage
    Réponses: 3
    Dernier message: 17/10/2006, 09h28
  3. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  4. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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