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 :

Trouve pas de soluce :(


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut Trouve pas de soluce :(
    J'ai récupéré le script suivant dans le threads
    http://www.developpez.net/forums/viewtopic.php?t=363437

    J'ai fait un peu le ménage ce qui donne en définitive le script suivant


    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
    47
    48
    49
    50
    51
    52
    53
    #!C:\Perl\bin\perl.exe 
     
     
    ################################## 
    # Tableau d'adresse(s) 
    ################################## 
     
    @EE = ("http://www.google.com/robots.txt","http://search.msn.fr/robots.txt"); 
     
     
    for $X( @EE ) { 
     
     
    ################################## 
    # Appelle des fonctions 
    ################################## 
     
    @EE = find(@EE); 
    @EE = replace(@EE); 
    print "@EE"; # Récupération de robotx.txt 
     
    ################################## 
    # Recherche des robots.txt 
    ################################## 
     
    sub find { 
      use LWP::Simple; 
        my @resultat; 
        for my $url( @_ ) { 
            push @resultat, get($url); 
        } 
        return @resultat; 
     } 
     
    ################################## 
    # Parser robots.txt 
    ################################## 
     
    sub replace 
    { 
    for my $T( @_ ) { 
    $T =~ s/User-agent: \*//ig; 
    $T =~ s/Allow.*//g; 
    $X =~ s/\/robots\.txt//ig; 
    $T =~ s/Disallow: /$X\/$1/ig; 
    $T =~ s/\/\//\//ig; 
    $T =~ s/http:\//http:\/\//ig; 
    $T =~ s/^\n*//ig; 
    $T =~ s/\n$//ig; 
    return $T; 
       } 
     } 
    }

    Mais j'ai un problème insoluble avec la fonction replace, elle ne retourne que le premier item du tableau @EE , j'ai testé divers solutions dont

    .........................................................
    . Attention code barbare zone 51 lol .
    .........................................................

    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
    sub replace
    {
     my @resultat;
    for my $T( @_ ) {
     push @resultat,  $T =~ s/User-agent: \*//ig &&
                      $T =~ s/Allow.*//g &&
                      $X =~ s/\/robots\.txt//ig &&
                      $T =~ s/Disallow: /$X\/$1/ig &&
                      $T =~ s/\/\//\//ig &&
                      $T =~ s/http:\//http:\/\//ig &&
                      $T =~ s/^\n*//ig &&
                      $T =~ s/\n$//ig;
      }
      return @resultat;
    }
    sa ne bug pas mais j'obtient juste résultat 1

    Ou est le problème ?

  2. #2
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut Re: Trouve pas de soluce :(
    Citation Envoyé par vodevil
    ...

    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
    sub replace
    {
     my @resultat;
    for my $T( @_ ) {
     push @resultat,  $T =~ s/User-agent: \*//ig &&
                      $T =~ s/Allow.*//g &&
                      $X =~ s/\/robots\.txt//ig &&
                      $T =~ s/Disallow: /$X\/$1/ig &&
                      $T =~ s/\/\//\//ig &&
                      $T =~ s/http:\//http:\/\//ig &&
                      $T =~ s/^\n*//ig &&
                      $T =~ s/\n$//ig;
      }
      return @resultat;
    }
    sa ne bug pas mais j'obtient juste résultat 1

    Ou est le problème ?
    1. D'où vient ce $X ?

    2. Dès qu'un s/// échoue la chaîne s'arrête et les s/// suivants ne sont pas évalués (mais a priori c'est pas le cas -- pour l'instant).

    3. Tu es en train de pusher le résultat de la dernière opération sur ton array. Qui est simplement le nombre de substitutions opérées (donc, 1, CQFD).

    A la rigueur tu peux ajouter un à la fin, mais toutes ces s/// me semble horriblement complexe pour pas grande chose. Tu peux donner quelques exemple de "avant - après" et je suis sûr qu'on peut trouver quelque chose de plus succincte.

    N

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Le $X est en fait chaque item de @EE dépouille de /robots.txt, donc http://www.google.com et http:://search.msn.fr.

    Tu as raison si je met && $T a la fin sa marche mieux

    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
    sub replace 
    { 
     my @resultat; 
    for my $T( @_ ) { 
     push @resultat,  $T =~ s/User-agent: \*//ig && 
                      $T =~ s/Allow.*//g && 
                      $X =~ s/\/robots\.txt//ig && 
                      $T =~ s/Disallow: /$X\/$1/ig && 
                      $T =~ s/\/\//\//ig && 
                      $T =~ s/http:\//http:\/\//ig && 
                      $T =~ s/^\n*//ig && 
                      $T =~ s/\n$//ig && $T; 
      } 
      return @resultat; 
    }
    ce qui me donne


    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    http://www.google.com/search
    http://www.google.com/groups
    http://www.google.com/images
    http://www.google.com/catalogs
    http://www.google.com/catalog_list
    http://www.google.com/news
    http://www.google.com/nwshp
    http://www.google.com/?
    http://www.google.com/addurl/image?
    http://www.google.com/pagead/
    http://www.google.com/relpage/
    http://www.google.com/sorry/
    http://www.google.com/imgres
    http://www.google.com/keyword/
    http://www.google.com/u/
    http://www.google.com/univ/
    http://www.google.com/cobrand
    http://www.google.com/custom
    http://www.google.com/advanced_group_search
    http://www.google.com/advanced_search
    http://www.google.com/googlesite
    http://www.google.com/preferences
    http://www.google.com/setprefs
    http://www.google.com/swr
    http://www.google.com/url
    http://www.google.com/wml?
    http://www.google.com/xhtml?
    http://www.google.com/imode?
    http://www.google.com/jsky?
    http://www.google.com/pda?
    http://www.google.com/sprint_xhtml
    http://www.google.com/sprint_wml
    http://www.google.com/pqa
    http://www.google.com/palm
    http://www.google.com/hws
    http://www.google.com/bsd?
    http://www.google.com/linux?
    http://www.google.com/mac?
    http://www.google.com/microsoft?
    http://www.google.com/unclesam?
    http://www.google.com/answers/search?q=
    http://www.google.com/local?
    http://www.google.com/local_url
    http://www.google.com/froogle?
    http://www.google.com/froogle_
    http://www.google.com/print?
    http://www.google.com/scholar?
    http://www.google.com/complete
    http://www.google.com/sponsoredlinks
    http://www.google.com/videosearch?
    http://www.google.com/videopreview?
    http://www.google.com/videoprograminfo?
    http://www.google.com/maps?
    http://www.google.com/translate?
    http://www.google.com/ie?
    http://www.google.com/sms/demo?

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/04/2010, 14h58
  2. [jonas]eclipse ne trouve pas le plugin
    Par Stessy dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 17/07/2007, 11h43
  3. je ne trouve pas la bonne syntaxe
    Par poelvo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2003, 01h30
  4. [TP]trouve pas le graph.tpu
    Par kaygee dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/06/2003, 12h49
  5. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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