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 & Regex


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Par défaut Perl & Regex
    Bonjour à tous,

    J'aimerais savoir comment je peux réaliser ceci en perl :

    J'ai dans une ligne la chaine suivante :

    5013179;GIBERT PATRICIA;0;41100000;25 RES DE MONTGERMONT;;77930;SAINT SAUVEUR SUR ECOLE;CL;30002;06952;0000005793L;58

    Je souhaite récupérer chaque champ entre les ; dans un tableau indexé.

    Exemple :

    %tab = ( num => 5013179, nom => "GIBERT PATRICIA", type => 0 etc....)

    Je vous remercie & vous souhaitent une bonne journée.

    Flux__

  2. #2
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour,

    Pour faire ceci, découpe ta chaîne avec la fonction split. Ensuite, pour transformer ton tableau obtenur avec split en table de hachage, tu peux le faire avec la fonction map suivi d'un bloc

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Par défaut
    Merci,

    Je débute en perl & pour trouver une aide aussi bien faite que php.net, c'est dur.

    Encore merci, je post de nouveau si pbs

    Bonne journée.

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Si tu cherches de l'aide, tu as toqué à la bonne porte
    Je te conseille l'excellent tutoriel de Sylvain Lhullier ainsi que notre FAQ. Ces deux ressources sont très riches et adaptés aux débutants en Perl, et même en programmation.

    Je te conseille très vivement leur lecture

  5. #5
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut
    Citation Envoyé par Fluxy
    Bonjour à tous,

    J'aimerais savoir comment je peux réaliser ceci en perl :

    J'ai dans une ligne la chaine suivante :

    5013179;GIBERT PATRICIA;0;41100000;25 RES DE MONTGERMONT;;77930;SAINT SAUVEUR SUR ECOLE;CL;30002;06952;0000005793L;58

    Je souhaite récupérer chaque champ entre les ; dans un tableau indexé.

    Exemple :

    %tab = ( num => 5013179, nom => "GIBERT PATRICIA", type => 0 etc....)

    Je vous remercie & vous souhaitent une bonne journée.

    Flux__
    Dans un premier temps, tu peux créer un tableau de noms de champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @tabNoms = ('num','nom','type', ...);
    Ensuite, tu explose ta chaine avec la fonction split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ligneExplosee = split(";", $ligne);
    Il te reste enfin à générer ta table de hash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ($i=0; $i<@ligneExplosee; $i++) {
      $tableHashee{$tabNoms[$i]} = $ligneExplosee[$i];
    }
    Ceci n'est qu'une proposition, assez mal écrite mais je l'espère compréhensible.

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par yjuliet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ($i=0; $i<@ligneExplosee; $i++) {
      $tableHashee{$tabNoms[$i]} = $ligneExplosee[$i];
    }
    Ceci n'est qu'une proposition, assez mal écrite mais je l'espère compréhensible.
    Si tu veux faire légèrement plus élégant, tu peux faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my %tableHashee;
    @tableHashee{@tabNoms} = @ligneExplosee;
    En fait s'il s'agit d'une opération que tu ne répètes pas et si tu n'as pas vraiment besoin de @tabNoms, tu peux te contenter de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my @records;
    while( my $line = <$input_file> ){
        my %hash;
        @hash{ "num", "nom", ... } = split ";", $line;
        push @records, \%hash;
    }
    Ou quelque chose comme ça...

    --
    Jedaï

Discussions similaires

  1. PHP PERL et regex
    Par floanne dans le forum Langage
    Réponses: 8
    Dernier message: 08/07/2009, 14h14
  2. regex : différence entre Perl et Python
    Par rambc dans le forum Général Python
    Réponses: 3
    Dernier message: 08/01/2009, 20h53
  3. regex en perl
    Par flavia dans le forum Langage
    Réponses: 5
    Dernier message: 16/07/2008, 11h21
  4. [Regex perl] Matcher un gros fichier
    Par osoumayaj dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/01/2007, 09h37

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