expression reguliere d'un url

Nouveau WRInaute
bonjour tout le monde,
je suis actuellement entraine de programmé en perl, c'est la première fois et j'ai un problème pour l'expression régulière d'un url que je dois aller et récupérer des ids. voici l'url : href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663" , le numero de la fin (id) varie et voici ce que j'ai fait qui fonctionne pas.

while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){

if($fichier=~ "#^(((?:http?)://)?(?(2)(www\.)?|(www\.){1})([-a-z0-9_]{2,}\.[-a-z0-9.]{2,}[-a-z0-9\/&\?=.]{2,})$#i\)"){

$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne= ^href="\resumeSearchResults\.cfm\?pageAction&.*resumeId=(\d+)/$#i"){


print ECRIRE $1."#";
$l++;
}

}

}
}
}
merci de bien vouloir m'aider.
 
WRInaute accro
comme0 a dit:
while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){

Tu ferais mieux de faire un next if $Fichier =~ /^./; ça simplifie la lecture...

comme0 a dit:
if($fichier=~ "#^(((?:http?)://)?(?(2)(www\.)?|(www\.){1})([-a-z0-9_]{2,}\.[-a-z0-9.]{2,}[-a-z0-9\/&\?=.]{2,})$#i\)"){


Là tu compares le nom du fichier (et non son contenu) avec ta regex de la mort qui tue. En plus je ne suis pas vraiment convaincu qu'elle soit très juste, et au minimum il y a beaucoup de choses superflues dedans. Mais que cherches-tu réellement à faire avec?

comme0 a dit:
$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne= ^href="\resumeSearchResults\.cfm\?pageAction&.*resumeId=(\d+)/$#i"){

- ça doit même pas compiler, ça, si? $ligne =~ /ta-regex/ ça devrait déjà mieux marcher...
- le href=... se situe vraiment en tout début de ligne?
- à quoi sert le \ dans href="\?
- la fin de ta "regex" me laisse perplexe... je pense que tu voulais dire "$/i mais je n'en suis pas convaincu. Et ça impliquerait qu'on passe à la ligne juste après cet attribut...

comme0 a dit:
merci de bien vouloir m'aider.

perldoc perlre :)

Jacques.
 
Nouveau WRInaute
en fait c'est la premiere fois que je fais j'ai beaucoup lu et voila ce que j'ai pu ecrire,
ce que je veux n'est rien de particulier qu'aller dans ce url: href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663 et recuperer le nonbre 757663 qui varier pour le mettre dans fichier où je peux l'exploiter après.
alors vous pouvez me suggerer une solution.
merci
 
WRInaute accro
comme0 a dit:
en fait c'est la premiere fois que je fais j'ai beaucoup lu et voila ce que j'ai pu ecrire,
ce que je veux n'est rien de particulier qu'aller dans ce url: href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663 et recuperer le nonbre 757663 qui varier pour le mettre dans fichier où je peux l'exploiter après.
alors vous pouvez me suggerer une solution.
merci

Code:
open my $fh,"$filename" or die "can't open $filename";
while (<$fh>)
{
 if (/href="resumeSearchResults\.cfm\?pageAction=viewResumeSearchResult&resumeId=(\d+)"/)
 {
  print "$1\n";
 }
}

Non?

Jacques.
 
Nouveau WRInaute
j'ai fait ça maintenant

if($Fichier=~ m/html/i){
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i){
print ECRIRE $1."#";
$l++;
}

}

}
mais toujour rien
 
WRInaute accro
comme0 a dit:
j'ai fait ça maintenant

if($Fichier=~ m/html/i){
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i){
print ECRIRE $1."#";
$l++;
}

}

}
mais toujour rien

1. "rien", ce n'est pas très précis... Il y a des erreurs, des warnings? Ajoute "use strict; use warnings" au début de ton programme, ça permettra d'en savoir plus.
2. Je suppose que le fh "ECRIRE" existe, et que tu as ouvert le fichier correspondant en écriture, que tu as vérifié qu'il l'ouvrait bien, et que tu as vérifié ce qu'il contenait à la fin?

Jacques.
 
Nouveau WRInaute
voici au complet mon script:
#!/usr/local/bin/perl
use Switch;


open(ECRIRE,">//var/www/html/comme/les_ids/mesIds")or die ("Erreur de creation de ids") ;
$dir = "/var/www/html/firstpage/";
$k=0;
$l=0;
opendir(DIR, $dir) || print "Repertoire $dir introuvable:$!\n";
while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){
if($Fichier=~ m/html/i){

$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i){


print ECRIRE $1."#";
$l++;
}

}

}
}
}

closedir(DIR);
close(ECRIRE);
$chaine="";
$chaineold="";
$oldvar="";
open(ECRIRE2,">/var/www/html/comme/les_ids/mesIdsFinal")or die ("Erreur de creation de creation \n") ;
open(LOG2, "/var/www/html/comme/les_ids/mesIds") or die(" pb avec : $!\n");
open(LOG3, "/var/www/html/comme/les_ids/mesIdsFinalOLD") or die(" pb avec : $!\n");
while(my $ligne = <LOG2>) {
chomp($ligne);
$chaine=$chaine."#".$ligne;
}
while(my $ligne = <LOG3>) {
chomp($ligne);
$chaine3=$chaine3."#".$ligne;
}
@Myliste = split(/#/, $chaine);
@Myliste = sort @Myliste;
foreach $var (@Myliste){
if($var ne $oldvar && !($chaine3 =~ m/#$var#/i)){ $oldvar=$var;print ECRIRE2 $var."#";$k++;}
}
close(LOG2);
close(ECRIRE2);
print $l.":".$k;

merci pour tes efforts
 
WRInaute accro
Eh, il n'y a pas marqué "on écrit tes scripts à ta place" ici, hein...

Si ton script il ne marche pas, ben tu débuggues. Tu commences par mettre les "use strict; use warnings;" dont je t'ai parlé, et tu ajoutes des traces pour voir ce qu'il fait, et tu vas finir par trouver ce qui ne marche pas.

Ceci dit, un petit indice, "print" ne rajoute pas de retour à la ligne spontanément, et pense à regarder ce qu'il y a dans tes fichiers intermédiaires pour voir...

Jacques.
 
Nouveau WRInaute
dsl pour le derangement mais j'ai un probleme avec le Strict et warnings; en je reçoi un message d'erreur qui me dit:
Can't locate Strict.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi

encore merci.
 
WRInaute accro
comme0 a dit:
dsl pour le derangement mais j'ai un probleme avec le Strict et warnings; en je reçoi un message d'erreur qui me dit:
Can't locate Strict.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi

encore merci.

Pas de majuscule à "strict".

Jacques.
 
Nouveau WRInaute
il ne m'indique pas où il y a les erreurs mais il m'affiche message de ce genre:
Global symbol "$ dir" exige explicitement le nom du paquet à indexcandidats.pl ligne 7. et c'est pour toutes les variables que j'ai utilisé.
et à la fin il me dit la compilation a été avorté en raison des erreurs de compilation.

puis-je avoir plus detaille si c'est possible.
merci
 
WRInaute accro
comme0 a dit:
il ne m'indique pas où il y a les erreurs mais il m'affiche message de ce genre:
Global symbol "$ dir" exige explicitement le nom du paquet à indexcandidats.pl ligne 7. et c'est pour toutes les variables que j'ai utilisé.
et à la fin il me dit la compilation a été avorté en raison des erreurs de compilation.

puis-je avoir plus detaille si c'est possible.
merci

Il faut que tu déclares tes variables avant de les utiliser: my $dir; par exemple...

Jacques.
 
Nouveau WRInaute
apres bcp des modif je pense que mon script devrais marcher, mais j'ai un souci c'est que l'url que j'ai ecrit je pense que c'est pas bon. voila l'url que je veux utiliser
href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663"

voici ce que j'ai ecrit:
if($ligne=~ m/"href=resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i)

j'aimerai bien si c'est possible une proposition,
merci.
 
WRInaute accro
comme0 a dit:
apres bcp des modif je pense que mon script devrais marcher, mais j'ai un souci c'est que l'url que j'ai ecrit je pense que c'est pas bon. voila l'url que je veux utiliser
href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663"

voici ce que j'ai ecrit:
if($ligne=~ m/"href=resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i)

j'aimerai bien si c'est possible une proposition,
merci.

ben si tu ne mets pas le " au même endroit que tu le cherches, forcément, ça ne peut pas marcher. Sinon pas besoin d'escaper le deuxième ". Bref:

Code:
if($ligne =~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i)

Jacques.
 
Discussions similaires
Haut