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 :

creer sous liste tableau avec condition


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut creer sous liste tableau avec condition
    Bonjour à tous,
    J'ai une liste qui ressemble à cela :

    @liste = (37,36,35,34,33,32,0,0,0,0,0,0,0,0,0,0,0,0,19,18,17,16,15,14)

    Je souhaiterai commencer mon programme à partir des chiffres colorés en rouge, vérifier que leur somme est égale à 0. Si c'est le cas, je veux étendre ma sélection à droite et à gauche jusqu'à avoir tous les 0 donc ici 12 zéros.

    J'ai commencé par ceci, mais n'y a t'il pas plus simple ....
    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
    my $i = 12 ;
    my $j = 16;
    my $int = 0;
    my @index;
     
     
    @index = $i...$j;
    my @tab = @value[@index];
     
    if (sum(@tab)==0){
    	while($value[$i-1]==0){
    		$i--;
    	}
    	while($value[$j+1]==0){
    		$j++;
    	}
     
     
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    Hum, ça dépend de variantes de ta liste. Si les 0 sont toujours groupés ensemble, tu peux peut-être faire un join pour transformer ta liste en une chaîne de caractères et lui appliquer une expression régulière du genre /^[^0]*(0,)+[^0]*/. Mais pas sûr que cela te suffise pour ce que tu veux faire, tout dépend des valeurs susceptibles d'être prises par la liste et de ce que tu veux faire avec ces valeurs ensuite.

    Mais franchement, sauf cas particulier que seule toi peut connaître, ton approche consistant à parcourir explicitement la liste est sans doute la mailleure.

  3. #3
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Lolo, pour l'expression régulière, une simple recherche globale des tous les /(0+)/g suffit, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ perl -E '$a = "8783000334450000003333443330000000000";while ($a =~ /(0+)/g) { my $zero = $1; say "$zero at $-[1]\n" }'
    000 at 4
     
    000000 at 12
     
    0000000000 at 27
    On peut alors utiliser length($zero) pour connaitre la longueur de la chaine de zeros.

    En tout cas, l'idée est excellente, et efficace.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Lolo, pour l'expression régulière, une simple recherche globale des tous les /(0+)/g suffit, non ?
    Je voyais plutôt un join avec un séparateur (virgule) entre les chiffres pour éviter que les chiffres 40 0 ne soient interprétés comme deux zéros successifs. D'où l'expression régulière avec (0,)+. Les parties qui reconnaissent le début et la fin ne sont effectivement pas indispensables, mais je le fais assez souvent pour éviter des mauvaises surprises (reconnaissances faussement positives).

    Il y avait cependant une erreur dans mon expression régulière faite un peu à la hâte hier, il me faut une seconde paire de parenthèses: ((0,)+) pour capturer toute la chaîne.

Discussions similaires

  1. Tableau avec conditions
    Par patricklopez66 dans le forum Excel
    Réponses: 10
    Dernier message: 08/11/2016, 08h05
  2. Liste déroulante avec conditions de choix
    Par CHRISTOPHE51210 dans le forum Excel
    Réponses: 1
    Dernier message: 14/02/2011, 06h09
  3. taille d'un tableau avec condition
    Par marooh dans le forum C
    Réponses: 10
    Dernier message: 22/10/2010, 14h22
  4. Creer un 3ème tableau avec 2 tableaux
    Par anxious dans le forum Langage
    Réponses: 10
    Dernier message: 10/12/2009, 18h00
  5. zone de liste déroulante avec conditions
    Par aketo1082 dans le forum IHM
    Réponses: 1
    Dernier message: 07/08/2008, 15h28

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