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 :

Code plus court


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut Code plus court
    Bonjour ,
    Y a t-il un moyen plus court et plus clair d'écrire ça :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    foreach $ligne1 (@lots){
    		chomp ($ligne1);
    		($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n)=split (/;/,$ligne1);
    		if ($e !~ /^T$/) {
    			if ($e !~ /^Td$/) {
    				if ($e !~ /^Tt$/) {
    					if ($e !~ /^Ttd$/) {
    						if ($e !~ /I/) {
    							if ($e eq "P") {
    								if ($a =~ /16X/) {
    									if ($l != 1) {
    										print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    									}
    								}
    								elsif ($a =~ /^FE/) {
    									if ($l != 2) {
    										print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    									}
    								}
    								elsif ($a =~ /^CENT/) {
    									if ($l != 2) {
    										print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    									}
    								}
    							}
    							elsif($l != 0) {
    								print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    							}
    							elsif ($e =~ /C/) {
    								print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    							}
    							elsif ($e =~ /e/) {
    								print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    							}
    							elsif ($e =~ /b/) {
    								print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    							}
    							elsif ($e =~ /d/) {
    								print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    Merci pour vos conseils

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Déjà tu peux déclarer une fonction de validation du paramètre e :
    Qui retour true/False en fonction de si il est valide ou non.
    Cela devrai réduire déjà un peu les if présent dans le for.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    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
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il y a des tas de possibilités. En voici une (non testée):
    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
    foreach $ligne1 (@lots){
    	chomp ($ligne1);
    	my ($a, $b ,$c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n) = split (/;/, $ligne1);
    	for ($e) {
    		last if /^T[td]?$/ or /^Ttd$/ or /I/;
    		if ($e eq "P") {
    			if (    ( $a =~ /16X/   and $l != 1)
    			     or ( $a =~ /^FE/   and $l != 2)
    			     or ( $a =~ /^CENT/ and $l != 2)
    			   ) {
    			        print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    			}
    		} elsif (  $l != 0 or /C/ or /e/ or /b/ or /d/) {
    			print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    		}
    	}
    }
    C'est manifestement plus court, je ne sais si c'est plus clair pour toi, mais ça l'est à mes yeux.

    A ta disposition pour expliquer ce que tu ne comprendrais pas.

    Perso, je n'utiliserais pas les variables $a à $n, mais splitterais plutôt dans un tableau, mais ce n'était pas ta question.

  4. #4
    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 : 59
    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
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    Il y a des tas de possibilités. En voici une (non testée):
    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
    foreach $ligne1 (@lots){
    	chomp ($ligne1);
    	my ($a, $b ,$c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n) = split (/;/, $ligne1);
    	for ($e) {
    		last if /^T[td]?$/ or /^Ttd$/ or /I/;
    		if ($e eq "P") {
    			if (    ( $a =~ /16X/   and $l != 1)
    			     or ( $a =~ /^FE/   and $l != 2)
    			     or ( $a =~ /^CENT/ and $l != 2)
    			   ) {
    			        print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    			}
    		} elsif (  $l != 0 or /C/ or /e/ or /b/ or /d/) {
    			print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    		}
    	}
    }
    C'est manifestement plus court, je ne sais si c'est plus clair pour toi, mais ça l'est à mes yeux.

    A ta disposition pour expliquer ce que tu ne comprendrais pas.

    Perso, je n'utiliserais pas les variables $a à $n, mais splitterais plutôt dans un tableau, mais ce n'était pas ta question.
    Attention Lolo, dans les conditions de last if ... et elsif ...), les regexp utilisent $_ au lieu de $e.
    Par ailleurs, n'est-il pas plus simple de remplacer le for ($e) { last if cond par un unless cond ?
    Pour ce qui est du split, il peut être plus "court" d'écrire print RES "@tableau\n";, ce qui du coup, peut devenir pertinent pour la question posée

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Attention Lolo, dans les conditions de last if ... et elsif ...), les regexp utilisent $_ au lieu de $e.
    Ce n'est pas un problème puisque le for ($e) { ... donne la valeur de $e à $_. C'est d'ailleurs le but, simplifier pas moins de 7 expressions régulières et pouvoir utiliser last pour limiter le niveau d'imbrication des if. Mais la stratégie est bien sûr discutable, on peut en adopter une autre.

    Citation Envoyé par Philou67430 Voir le message
    Pour ce qui est du split, il peut être plus "court" d'écrire print RES "@tableau\n";, ce qui du coup, peut devenir pertinent pour la question posée
    [/QUOTE]

    Effectivement.

  6. #6
    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 : 59
    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
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Ce n'est pas un problème puisque le for ($e) { ... donne la valeur de $e à $_. C'est d'ailleurs le but, simplifier pas moins de 7 expressions régulières et pouvoir utiliser last pour limiter le niveau d'imbrication des if.
    Bon sang, mais c'est bien sûr

  7. #7
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    Il y a des tas de possibilités. En voici une (non testée):
    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
    foreach $ligne1 (@lots){
    	chomp ($ligne1);
    	my ($a, $b ,$c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n) = split (/;/, $ligne1);
    	for ($e) {
    		last if /^T[td]?$/ or /^Ttd$/ or /I/;
    		if ($e eq "P") {
    			if (    ( $a =~ /16X/   and $l != 1)
    			     or ( $a =~ /^FE/   and $l != 2)
    			     or ( $a =~ /^CENT/ and $l != 2)
    			   ) {
    			        print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    			}
    		} elsif (  $l != 0 or /C/ or /e/ or /b/ or /d/) {
    			print RES "$a $b $c $d $e $f $g $h $i $j $k $l $m $n\n";
    		}
    	}
    }
    C'est manifestement plus court, je ne sais si c'est plus clair pour toi, mais ça l'est à mes yeux.

    A ta disposition pour expliquer ce que tu ne comprendrais pas.

    Perso, je n'utiliserais pas les variables $a à $n, mais splitterais plutôt dans un tableau, mais ce n'était pas ta question.

    Merci , ça marche nickel , du coup je conserve , et c'est bien plus court .

    C'est vrai qu'en reprenant ce code existent , je n'ai pas pensé au "or" .

    La logique .........

    Re MERCI

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

Discussions similaires

  1. Un moyen de rendre mon code plus rapide?
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/05/2008, 10h36
  2. rendre mon code plus propre
    Par superspike23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/01/2008, 10h10
  3. je comprend pas un code du cours perl
    Par fifto dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2007, 20h14
  4. Traçage automatique du code en cours
    Par tunizar dans le forum WinDev
    Réponses: 13
    Dernier message: 22/02/2007, 13h04
  5. recherche du plus cours chemins entre 2 sommets d'1 graphes
    Par must19 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 05/04/2006, 11h57

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