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 :

problème sur un split


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut problème sur un split
    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
     
    $v=0;
    while (<Z>) {
         chomp; $uid=$valeurs="";
     
         ($uid=$_,$valeurs=$_)=/^([^\t]+)\t[^\t]+\t(.+)$/;
     
         foreach (split ("\t",$valeurs)) {
           if ($_ ne "") {
             $liste_v[$v]=$_; $v++;
           }
           else {
             $liste_v[$v]='null'; $v++;
           }
         }
    }
    voici mon problème :
    Si la ligne ($valeurs) fini par \t (tabulation), ce code ne rentre pas une valeur 'null' dans ma liste @liste_v !!
    Comment y remedier : : : :

    merci

  2. #2
    Membre confirmé Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    pour simplifier mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $uu="momo\t\tdingo\ttoto\n";
    $v=1;
    chomp $uu;
    @liste=split("\t",$uu);
    foreach $truc(@liste) {
      print "$v : $truc\n";
      $v++;
    }
    donne :
    1 : momo
    2 :
    3 : dingo
    4 : toto

    par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $uu="momo\ttoto\tdingo\t\n";
    $v=1;
    chomp $uu;
    @liste=split("\t",$uu);
    foreach $truc(@liste) {
      print "$v : $truc\n";
      $v++;
    }
    donne:
    1 : momo
    2 : toto
    3 : dingo

    Pourquoi ça donne pas aussi : "4 : " ??
    comment y remedier
    :

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    bah c'est normal!!
    => momo|rien|dingo|toto
    => 4 cases

    => momo|toto|dingo (y a pas de 4eme car \n apres donc rien)
    => 3 cases

    si tu fais je pense que t'aura 4 case (pas testé!! )

  4. #4
    Membre confirmé Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    je ne peux pas modifier mes fichier d'origine donc je pense que je vais faire une expression régulière pour récupérer les lignes.

    le nombre d'élément par ligne est variable mais je le connais ($nbre), djibril, peux tu me corriger mon expression régulière : :
    je te remercie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $uu="momo\ttoto\tdingo\t\n";
    chomp $uu;
    $nbre=4;
    $v=1;
    $uu=~/^([^\t]*)(\t([^\t]*))*/;
    for ($k=1; $k<=$nbre;$k++) {
     print "$v : $$k\n"; $v++;
    }
    le problème vient de : (\t([^\t]*))* , je veux \t([^\t]*) plusieus fois .... et l'avoir dans les variables $1, $2, etc ....

  5. #5
    Membre confirmé Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    C'est bon, j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $uu="momo\ttoto\tdingo\t\n";
    chomp $uu;
    $nbre=4;
    $v=1;
    $exp='\t([^\t]*)'x($nbre-1);
    $uu=~/^([^\t]*)$exp/;
    for ($k=1; $k<=$nbre;$k++) {
     print "$v : $$k\n"; $v++;
    }

  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
    Y a plus simple : voici le résultat de "perldoc -f split"
    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
     
        split /PATTERN/,EXPR,LIMIT
     
        split   Splits the string EXPR into a list of strings and returns that
                list. By default, empty leading fields are preserved, and empty
                trailing ones are deleted. (If all fields are empty, they are
                considered to be trailing.)
     
                If LIMIT is specified and positive, it represents the maximum
                number of fields the EXPR will be split into, though the actual
                number of fields returned depends on the number of times PATTERN
                matches within EXPR. If LIMIT is unspecified or zero, trailing
                null fields are stripped (which potential users of "pop" would
                do well to remember). If LIMIT is negative, it is treated as if
                an arbitrarily large LIMIT had been specified. Note that
                splitting an EXPR that evaluates to the empty string always
                returns the empty list, regardless of the LIMIT specified.
    Il suffit donc de faire un split en rajoutant le paramètre "-1" et le problème est réglé.

    --
    Jedaï

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

Discussions similaires

  1. Problème sur split avec regex
    Par fr1man dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/05/2009, 13h46
  2. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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