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 :

Optimisation de script


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 183
    Par défaut Optimisation de script
    Bonjour,

    Prenons un exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl -w
    my $str = "hello-world-";
    print ("$str\n"); #print affiche hello-world-
    $str =~ s/-/ /;
    print ("$str\n"); #print affiche hello world-
    $str =~ s/-/!/;
    print ("$str\n"); #print affiche hello world!
    Jusque là, je ne pense pas trop me tromper. Le problème qu'il se pose ici c'est que $str passe 2 fois à la moulinette. Y aurait-il une astuce pour combiner les deux expressions et donc de ne faire passer $str qu'une seule fois dans le filtre. Ce qui pourrait donner un code similaire à celui-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl -w
    my $str = "hello-world-";
    $str =~ s/l'expression qui va bien/;
    print ("$str\n"); #print affiche hello world!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl -w
    my $str = "hello-world-";
    $str =~ s/(\w+)-(\w+)-/$1 $2!/;
    print "$str\n"; #print affiche hello world!

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 183
    Par défaut
    Impeccable merci et en plus ça fonctionne
    J'aimerais un complément de réponse cependant, l'expression prend en compte le premier caractère - et le remplace par un espace puis prend le suivant et le remplace par un !. En voyant la réponse, je m'aperçois aussi que mon exemple est un cas particulier assez simple. Reprenons un exemple plus complexe mais avec la solution ci-dessus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl -w
    my $str = "Les-expressions-régulières;sont;rationnelles";
    $str =~ s/(\w+)-(\w+)-(\w+);(\w+);/$1 $2 $3 $4,/;
    print ("$str\n"); #print affiche Les expressions rationnelles sont,regulieres
    Ici, on remarque que $1 $2 et $3 sont identiques, serait-il donc possible de condenser l'expression ci-dessus qui fonctionne correctement mais de maniere à n'obtenir que 2 sorties $1 et $2 puisqu'il n'y a que 2 changement à faire. J'ai pensé à regrouper les 3 premiers caractères de manière à faire 2 groupes de changement mais je dois mal m'y prendre car je n'y arrive pas. Ce qui donnerait donc que les deux caractères - et le premier caractère ; soient remplacés par un espace et que le dernier ; soit lui remplacé par une virgule.

    Merci, pour votre aide

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Re,
    Citation Envoyé par Ashgenesis
    Ici, on remarque que $1 $2 et $3 sont identiques, serait-il donc possible de condenser l'expression ci-dessus qui fonctionne correctement mais de maniere à n'obtenir que 2 sorties $1 et $2 puisqu'il n'y a que 2 changement à faire. J'ai pensé à regrouper les 3 premiers caractères de manière à faire 2 groupes de changement mais je dois mal m'y prendre car je n'y arrive pas. Ce qui donnerait donc que les deux caractères - et le premier caractère ; soient remplacés par un espace et que le dernier ; soit lui remplacé par une virgule.

    Merci, pour votre aide
    C'est faut ce que tu dit.

    En fait $1, $2, etc se sont des variables qui contiennent la partie de la chaîne reconnue par le motif entre paranthéses.
    Le comptage commence à gauche (les paranthèses ouvrantes)
    $1 - 1ère paranthèse ouvrante
    $2 - 2ème paranthèse ouvrante
    etc.

    (\w+)
    le fait que tu as plusieurs groups comme ça, ne veut pas dire que c'est la même chose
    \w - répresente un caractère mot qui peut être
    une lettre minuscules de a à z
    une lettre majuscules de A à Z
    une chiffre de 0 à 9
    ou le caractère souligné (underscore) _

    Donc tu remarques bien que les caractères avec accents ne sont par reconnus par \w

    + c'est un quantificateur qui veut dire reconnaît minimum une fois, et maximum combient il peut

    \w ou [a-zA-Z0-9_] c'est la même chose

    Ca depends de ce qu'on veut faire, et à savoir qu'il y a toujours plusieurs façon de le faire.

    par exemple dant ton cas on pourrais utiliser une seule fois s///
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str =~ s/(\w+)-(\w+)-(.*);(\w+);/$1 $2 $3 $4,/;
    voilà une autre façon de le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str =~ s/[-;](?=s)/ /g;
    $str =~ s/;/,/;
    Il faut lire les regex pour mieux comprendre.

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 183
    Par défaut
    Merci pour les infos complémentaires, j'ai lu les regex mais j'ai toujours eu du mal à les assimiler. Bref, mon script fonctionne et est déjà mieux qu'avant donc pour ma part il est résolu.

    Merci encore

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

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Optimiser vos scripts
    Par djibril dans le forum Langage
    Réponses: 33
    Dernier message: 11/06/2009, 16h10
  3. [Oracle] Optimisation de script
    Par johnkro dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 12/07/2006, 10h33
  4. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

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