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 :

need help pour : boucle & expression régulière


Sujet :

Langage Perl

  1. #1
    Fabouney
    Invité(e)
    Par défaut need help pour : boucle & expression régulière
    bonjour, soit cette syntaxe de ligne dans un fichier txt :

    clé:12456|champ1=value1|champ2=value2|...
    clé:87481|champ1=value1|champ2=value2|...
    comment pourrais-je extraire le couple ($nom_champ,$valeur_champ) ?

    on m'a proposé cette solution, qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $file="fichier.txt";open(BASE,"<$file");@fichier = <BASE>;close BASE;
    foreach $ligne (@fichier){
        foreach $data (split('|',$ligne)) {
         local ($nom,$valeur)=split('=',$data);
         $tableau{$nom}=$valeur;
        }
    }
     
    $tableau{'nom'} contient dupont
    etc....
    si $nom="nom";
    $tableau{$nom} contient dupont
    Merci de me dire les éventuelles correction à apporter à ce bout de code, ou à apporté completement une autre solution, merci d'avance pour votre aide, à bientôt.


    Fabien.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Re: need help pour : boucle & expression régulière
    Bonjour,
    Citation Envoyé par Fabouney
    clé:12456|champ1=value1|champ2=value2|...
    clé:87481|champ1=value1|champ2=value2|...
    Tu as essayer avec les expressions régulières :
    C'est mon premier essai alors on ne se moque pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /clé:\d+(\|champ\d+=\w+)*/
    Et les résultats sont dans $1...$9

    Bon je ne pense pas que ça soit ça (c'est le champ\d+ qui me gène) enfin j'aurai essayer

  3. #3
    Fabouney
    Invité(e)
    Par défaut
    j'ai pas trop essayé avec les expression régulière, mais bon j'partirai plus du principe que j'ai évoqué, avec les split().

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Fabouney
    j'ai pas trop essayé avec les expression régulière, mais bon j'partirai plus du principe que j'ai évoqué, avec les split().
    Dans ce cas, pour avoir la clé, il faut faire un split sur le caractère : et non =

  5. #5
    Fabouney
    Invité(e)
    Par défaut
    mais non, lit bien mon post,

    comment pourrais-je extraire le couple ($nom_champ,$valeur_champ) ?
    je veux récupérer ce qui est de par est autre du "=" justement, donc le nom et la valeur.

  6. #6
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Salut,

    Faire parcourir chaque ligne du fichier dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open(fich, "fichier.txt");
    while($ligne = <fich>) {
    Extraire la clé de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ($cle, $couples) = $ligne =~ /clé:(\d+)\|(.*)/;
        print "clé = $cle\n";
    Ensuite extraire les couples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        foreach (split /\|/, $couples) {
            ($champ, $valeur) = /(.*)=(.*)/;
            print "$champ = $valeur\n";
        }
    Fin de la boucle : Voilà

Discussions similaires

  1. Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes
    Par MediaVistaIntel dans le forum Général Python
    Réponses: 11
    Dernier message: 01/12/2011, 14h19
  2. [RegEx] Problème pour concevoir une expression régulière
    Par lokicorp dans le forum Langage
    Réponses: 5
    Dernier message: 08/07/2011, 13h12
  3. Need help pour une petite requête
    Par julie75 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/08/2007, 17h10
  4. Need help pour installer upgrade linux Debian
    Par jejerome dans le forum Administration système
    Réponses: 2
    Dernier message: 26/03/2006, 19h26
  5. Passage algo - code pour génération d'expressions régulières
    Par deedoo dans le forum Général Python
    Réponses: 6
    Dernier message: 11/08/2005, 14h32

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