Recherche
Posez votre question Signaler

Substitution en Perl [Résolu]

nanou2183 46Messages postés lundi 19 février 2007Date d'inscription 15 juin 2010Dernière intervention - Dernière réponse le 25 nov. 2007 à 13:58
bonjour à tous,
je suis en plein projet pour l'école et je programme en perl
j'ai un soucis au niveau d'une substitution
je vous explique
je récupère un texte dans une variable $corps
j'ai une liste de mots dans @listemotsvides
et je dois supprimer les mots de la liste dans le texte
j'ai donc fait ca :
sub vide($corps){
open(texte2,"<motsvides2.txt") or die"pb";
while($t=<texte2>){
#tableau de mots vides
push(@listemotsvides,$t);
}
close (texte2);
#La fonction vide permet de supprimer les mots vides
foreach $element(@listemotsvides){
$corps=~s/{element}//g;
#$corps=~s/[a-z]*ait//g;
}
}
et dans mon programme j'appelle ma fonction:
vide($corps);
et je comprends pas pourquoi ca ne supprime pas les mots
merci d'avance pour votre réponse
nanou
Lire la suite 
Réponse
+0
moins plus
je viens de me rendre compte d'une erreur dans la substitution c'est $element mais ca change rien à mon résultat
Ajouter un commentaire
Réponse
+0
moins plus
je vois que les mots tu les récuperes depuis un fichier

C'est quoi la structure de ce fichier?
un mot par ligne?
plusieurs mots pas ligne?

Ce n'est pas comme ça qu'on écrit une procécure
sub vide($corps){

mais
sub vide {
   $coprs=shift;


nanou2183 46Messages postés lundi 19 février 2007Date d'inscription 15 juin 2010Dernière intervention - 19 févr. 2007 à 20:49
ah bon? ok c c'est une fille de ma classe qui m'a dit de faire comme ca
euh ouai dans mon fichier j'ai un mot par ligne

voilà
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
lami20j@debian:~/trash$ cat motsvides.txt
liste
je
vous
plein
texte
lami20j@debian:~/trash$ cat substitution.pl
#!/usr/bin/perl
#
open F_MOTS, "motsvides.txt" or die "E/S : $!\n";

my @listemotsvides;

push @listemotsvides,$_ while (<F_MOTS>);
map { chomp } @listemotsvides;

my $corps =
q{bonjour à tous,
   je suis en plein projet pour l'école et je programme en perl
   j'ai un soucis au niveau d'une substitution
   je vous explique
   je récupère un texte dans une variable $corps
   j'ai une liste de mots dans @listemotsvides
   et je dois supprimer les mots de la liste dans le texte
   j'ai donc fait ca};

print "AVANT\n-----\n$corps";
$corps =~ s/$_//g for @listemotsvides;
print "\n\n-----APRES-----\nLes mots supprimés sont : @{[ sort @listemotsvides ]}\n";
print "-" x 15 . "\n$corps\n";
__END__
Le résultat
lami20j@debian:~/trash$ perl substitution.pl
AVANT
-----
bonjour à tous,
   je suis en plein projet pour l'école et je programme en perl
   j'ai un soucis au niveau d'une substitution
   je vous explique
   je récupère un texte dans une variable $corps
   j'ai une liste de mots dans @listemotsvides
   et je dois supprimer les mots de la liste dans le texte
   j'ai donc fait ca

-----APRES-----
Les mots supprimés sont : je liste plein texte vous
---------------
bonjour à tous,
    suis en  prot pour l'école et  programme en perl
   j'ai un soucis au niveau d'une substitution
     explique
    récupère un  dans une variable $corps
   j'ai une  de mots dans @motsvides
   et  dois supprimer les mots de la  dans le
   j'ai donc fait ca

Ajouter un commentaire
Réponse
+0
moins plus
ca marche pas !! snif snif
ca me donne des caractères chelou
pffffff j'en ai marre
quand je fais afficher la liste des mots c 'est bon j'ai les bons mots
mais quand je veux afficher $corps ca me donne des trucs bizars
et pas du tout mon texte
Ajouter un commentaire
Réponse
+0
moins plus
j'ai fait ca
sub vide{
my $corps=shift;
open(texte2,"<motsvides2.txt") or die"pb";

my @listemotsvides;

push @listemotsvides,$_ while(<texte2>);
map { chomp } @listemotsvides;
#print "@listemotsvides";
$corps =~ s/$_//g for @listemotsvides;
print "$corps\n";
close (texte2);
}

alors peut etre que j'ai mal retransrit ton code mais bon ca marche pas stp encore un peu d'aide merki
Ajouter un commentaire
Réponse
+0
moins plus
#!/usr/bin/perl
#
my $corps = q{bonjour à tous,
   je suis en plein projet pour l'école et je programme en perl
   j'ai un soucis au niveau d'une substitution
   je vous explique
   je récupère un texte dans une variable $corps
   j'ai une liste de mots dans @listemotsvides
   et je dois supprimer les mots de la liste dans le texte
   j'ai donc fait ca};



sub vide{
  my $res=shift;
  open F_MOTS, "motsvides.txt" or die "E/S : $!\n";

  my @listemotsvides;

  push @listemotsvides,$_ while(<F_MOTS>);
  map { chomp } @listemotsvides;
  $res =~ s/\b$_\b//g for @listemotsvides;
  print "$res\n";
  close (F_MOTS);
}

vide($corps);
__END__
nanou2183 46Messages postés lundi 19 février 2007Date d'inscription 15 juin 2010Dernière intervention - 20 févr. 2007 à 10:48
bon bah je sais pas ce qu'il y a mais ca marche pas
ca me renvoie plus rien maintenant
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Ecoute chez moi ça marche.

Dit moi, tu es sur quel OS?
Comment tu lances le script?

Je l'ai testé sous Linux et Windows donc je ne vois pas où est le problème.

nanou2183 46Messages postés lundi 19 février 2007Date d'inscription 15 juin 2010Dernière intervention - 20 févr. 2007 à 10:56
euh c'est quoi un OS?
je suis sous unix et je lance mon prgramme en faisant
perl executv13.pl .... et tous les arguments car je crée plein de fichiers

je suis désolée d'etre si relou
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
OperatingSystem

perl executv13.pl .... et tous les arguments car je crée plein de fichiers

le script ne traite pas des arguments, tu ne l'as pas dit
c'est juste un exemple, donc il faut l'exécuter tel quel sans arguments

A savoir qu'il lit les mots dans le fichier motsvides.txt
Donc crée un fichier motsvides.txt est dédans écrit

liste
je
vous
plein
texte

ensuite exécute le script avec
perl script.pl
et je t'assure que ça marche

en revanche si tu veux utiliser des arguments il faut préciser en détails ce que tu veux faire (bien sûr si tu veux que je t'aide :-))

Ajouter un commentaire
Réponse
+0
moins plus
non mais en fait le problème que j'ai c'est seulement sur un bout de mon programme car il est beaucou p plus long c'est pour ca que je te dis que j'ai des arguments
et je veux bien te croire que ca fonctionne mais moi ca merde chez moi ...
doncje sais plus quoi faire et ca me rend barge !!!!
Ajouter un commentaire
Réponse
+0
moins plus
Je ne comprends pas.

je suppose que tu as ajouté le bout de code dans ton script et il ne fonctionne pas.

comme je te l'ai déjà dit, exécute seulement le bout de conde que je t'ai donnée en oubliant ce que tu as

et fait comme moi, affiche ici ce que tu exécute (ET UTILISE LES BALISES CODE)

tu peux afficher ton script.
N'aie pas peur, je ne vais pas voler ton travail :-) j'ai d'autre chose à faire
Si tu veux que je t'aide, alors aide moi ;-)
Ajouter un commentaire
Réponse
+0
moins plus
bon alors j'ai fait ca :

#!/usr/local/bin/perl
#
my $corps = q{bonjour à tous,
je suis en plein projet pour l'école et je programme en perl
j'ai un soucis au niveau d'une substitution
je vous explique
je récupère un texte dans une variable $corps
j'ai une liste de mots dans @listemotsvides
et je dois supprimer les mots de la liste dans le texte
j'ai donc fait ca};



sub vide{
my $res=shift;
open F_MOTS, "motsvides2.txt" or die "E/S : $!\n";

my @listemotsvides;

push @listemotsvides,$_ while(<F_MOTS>);
map { chomp } @listemotsvides;
$res =~ s/\b$_\b//g for @listemotsvides;
print "$res\n";
close (F_MOTS);
}

vide($corps);
__END__


et j'obtiens ca un truc qui a l'air de fonctionner mais je peux pas le copier ici

alors comment ca se fait que ca marche pas dans mon programme?

je veux bien te coller mon programme mais il est long :


#pour exécuter ce fichier :
# perl executv13.pl Docs posting.txt index.txt ../CODESQL/insertion.sql ../CODESQL/tfidf.sql ../CODESQL/insert.sql ../CODESQL/rappel.sql

#!/usr/local/bin/perl

#on lit d'abord le fichier des mots vides

#ensuite on fait les traitements sur les textes
#on ouvre le répertoire
$D=$ARGV[0];
opendir(D,$ARGV[0]);
@docs=readdir(D);
#on enlève de la liste des documents les . et ..
shift(@docs);
shift(@docs);


#tablo est le tableau des fréquences de chaque terme pour un document donné.
#tablo2 correspond au nombre de documents où apparait un terme d'indexation de la collection.
%tablo1=();
%tablo2=();
%tablo3=();
%tablo4=();
$ins=0;
$u=0;

#on ouvre en écriture le fichier posting
open(posting,">$ARGV[1]");
open(insertion,">$ARGV[3]");
foreach $fichier(@docs){
#on ouvre en lecture le fichier du répertoire Docs
$num=0;
open(texte,$ARGV[0]."/$fichier") or die"pb";
%tablo=();
while(@t=<texte>){
chomp(@t) ;
$t=join('',@t) ;
#on met tout en minuscules
$t=~tr/A-Z/a-z/;
accent($t);
caracteres($t);


if ($t=~/<meta name="Author" +content="([^"]*)">/){
$auteur=$1;
$auteur=~ s/,/ /g;
#print "auteur = $auteur\n\n" ;
$auteur=~ s/'/ /g;
}


if ($t=~/<address>([^<]*)<\/address>/){
$URL=$1;
#print "URL = $URL\n\n" ;
}


if ($t=~/<title>([^<]*)<\/title>/){
$titre=$1;
$titre=~ s/'/ /g;
#print "titre = $titre\n\n" ;
}


if ($t=~/<body[^>]*>(.*?)<\/body>/){
my $corps=$1;
#print "corps = $corps\n\n" ;
}



if ($auteur ne ""){
$longueur=@tablo1;
#print "$auteur\n";
while ($tablo1[$num] ne $auteur && $num<$longueur){
$num=$num+1;
#print "le num est $num\n";
}
if ($num!=$longueur){
$num=$num+1;
print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n
INSERT INTO DocAuteurs VALUES ('$fichier',$num);\n");
}else{
$tablo1[$num]=$auteur;
$num=$num+1;
print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n
INSERT INTO Auteurs VALUES ($num,'$auteur');\n
INSERT INTO DocAuteurs VALUES ('$fichier',$num);\n");

}}else{
print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n");
}
#print ("@tablo1\n");
#print insertion ("insert into Documents(Titre, URL, Id_collec) values ($titre, $URL, 1);\n
#insert into Auteurs(Nom) values ($auteur);\n");

balises($corps);
separateur($corps);
vide($corps);

#on met les termes d'indexation dans une liste
@liste=split(", ",$corps);
#print(@liste);
shift(@liste);

#on calcule les fréquence de chaque terme
foreach $element(@liste){
$tablo{substr($element,0,7)}+=1;
}
}

foreach $cle(keys(%tablo)){
#on remplit le fichier posting
if($tablo{$cle}<($u*0.67) && length($cle)>3){
print posting ("$cle \t $fichier \t $tablo{$cle}\n");
}
$tablo3[$i]=$fichier;
if($tablo3[$i-1] ne $tablo3[$i]) {
$u=$u+1;}
$i=$i+1;

#on crée le tableau qui nous permettra d'afficher l'index
if($tablo{$cle}>0 && $cle ne ""){
$tablo2{$cle}+=1;
}
}
}
close(posting);
close (insertion);

#on crée notre fichier index
open(ind,">$ARGV[2]");
foreach $cle(keys(%tablo2)){
if($tablo2{$cle}<($u*0.67) && length($cle)>3){
print ind ("$cle \t $tablo2{$cle}\n");}
}
close (texte);
close (ind);


open(posting,"posting.txt");
my @contenu=<posting>;
#On récupère tout le contenu du fichier posting dans la liste contenu
close(posting);

open(tfidf,">$ARGV[4]");
foreach (@contenu){
my @datas= split(/\t/, $_);
#On sépare les colonnes du fichier posting que l'on entre dans datas
$datas[0]=~s/ //g;
#On supprime les espaces de la première colonne du fichier posting
$datas[2]=~s/\n//g;
$datas[1]=~s/ //g;
#On supprime les retours à la ligne de la troisième colonne du fichier posting
$div=$u/$tablo2{$datas[0]};
$log=log($div);
$tfidf=$datas[2]*$log;
#On calcule grâce aux données que nous avons récupérées le tf*idf
$k=$k+1;
print tfidf ("INSERT INTO Termes (Nterme,Terme) VALUES ($k,'$datas[0]'); \n
INSERT INTO IndexDoc(Nterme,Ndoc,freq,poids) VALUES ($k,'$datas[1]',$datas[2],$tfidf);\n");

#On insère dans un fichier tfidf les commandes nécessaires aux insertions dans la table Termes
#et dans la table Temp qui nous sert d'intermédiaire pour les insertions dans la table IndexDoc
}
close(tfidf);


open(insert,">$ARGV[5]");
print insert ("INSERT INTO CollecDoc (Id_collec,Theme,Nb_doc) VALUES (1,'Maladies génétiques',$u);\n ");
#On insère dans la table CollecDoc les informations sur notre collection de documents
close(insert);


open(rappel,">$ARGV[6]");
$m=0;
while($m<1)
{print rappel ("INSERT INTO RepriseFixe (point) VALUES ($m);\n");
$m=$m+0.1;
#On insère dans la table RepriseFixe les points de reprise
}
close(rappel);



sub separateur{
$corps=shift;
#La fonction separateur permet de remplacer tous les séparateurs du corps des documents par des virgules
$corps=~s/<!--/, /g;
$corps=~s/ /, /g;
$corps=~s/«/, /g;
$corps=~s/»/, /g;
$corps=~s/%/, /g;
#$corps=~s/ /, /g;
$corps=~s/,/, /g;
$corps=~s/\./, /g;
$corps=~s/;/, /g;
$corps=~s/:/, /g;
$corps=~s/!/, /g;
$corps=~s/\?/, /g;
$corps=~s/\(/, /g;
$corps=~s/\)/, /g;
$corps=~s/\[/, /g;
$corps=~s/\]/, /g;
$corps=~s/\$/, /g;
$corps=~s/\+/, /g;
$corps=~s/\*/, /g;
#$corps=~s/-/, /g;
$corps=~s/\n/, /g;
$corps=~s/\t/, /g;
$corps=~s/\r/, /g;
$corps=~s/\//, /g;
$corps=~s/"/, /g;
$corps=~s/\^/, /;
$corps=~s/\'/, /g;
$corps=~s/=/, /g;
$corps=~s/#/, /g;
$corps=~s/-/, /g;
$corps=~s/</, /g;
$corps=~s/>/, /g;
$corps=~s/’/, /g;
$corps=~s/{/, /g;
$corps=~s/}/, /g;
$corps=~s/\|/, /g;
$corps=~s/ – /, /g;
#pour supprimer les vides
$corps=~s/(, )[, ]+/$1/g;
}


sub accent{
$t=shift;
#La fonction accent permet de remplacer les lettres à accents par ces mêmes lettres sans accents
$t=~s/é/e/g;
$t=~s/è/e/g;
$t=~s/ê/e/g;
$t=~s/ë/e/g;
$t=~s/ô/o/g;
$t=~s/à/a/g;
$t=~s/î/i/g;
$t=~s/ï/i/g;
$t=~s/û/u/g;
$t=~s/ù/u/g;

$t=~s/â/a/g;
$t=~s/ê/e/g;
$t=~s/ô/o/g;
$t=~s/ç/c/g;

$t=~s/É/e/g;
$t=~s/È/e/g;
$t=~s/À/a/g;
$t=~s/Ù/u/g;

$t=~s/Á/a/g;
$t=~s/Ã/a/g;
$t=~s/å/a/g;
$t=~s/Â/a/g;
$t=~s/Ä/a/g;
$t=~s/à/a/g;
$t=~s/À/a/g;
$t=~s/á/a/g;
$t=~s/ã/a/g;
$t=~s/Å/a/g;
$t=~s/â/a/g;
$t=~s/ä/a/g;
$t=~s/Ã/a/g;
$t=~s/Ã/a/g;
$t=~s/Â/a/g;

$t=~s/É/e/g;
$t=~s/é/e/g;
$t=~s/Ê/e/g;
$t=~s/ê/e/g;
$t=~s/È/e/g;
$t=~s/è/e/g;
$t=~s/Ë/e/g;
$t=~s/ë/e/g;
$t=~s/a¨/e/g;
$t=~s/a©/e/g;
$t=~s/é/e/g;
$t=~s/è/e/g;
$t=~s/aª/e/g;
$t=~s/è/e/g;
$t=~s/É/e/g;
$t=~s/É/e/g;
$t=~s/a‰/e/g;

$t=~s/Í/i/g;
$t=~s/í/i/g;
$t=~s/Î/i/g;
$t=~s/î/i/g;
$t=~s/Ì/i/g;
$t=~s/ì/i/g;
$t=~s/Ï/i/g;
$t=~s/ï/i/g;
$t=~s/ï/i/g;
$t=~s/a¯/i/g;

$t=~s/Ñ/n/g;
$t=~s/ñ/n/g;

$t=~s/Ó/o/g;
$t=~s/ó/o/g;
$t=~s/Ô/o/g;
$t=~s/ô/o/g;
$t=~s/Ò/o/g;
$t=~s/ò/o/g;
$t=~s/Ö/o/g;
$t=~s/ö/o/g;
$t=~s/Õ/o/g;
$t=~s/õ/o/g;
$t=~s/ô/o/g;
$t=~s/a´/o/g;

$t=~s/Ú/u/g;
$t=~s/ú/u/g;
$t=~s/Û/u/g;
$t=~s/û/u/g;
$t=~s/Ù/u/g;
$t=~s/ù/u/g;
$t=~s/Ü/u/g;
$t=~s/ü/u/g;

$t=~s/Ý/y/g;
$t=~s/ý/y/g;
$t=~s/ÿ/y/g;

$t=~s/é/e/g;
$t=~s/aˆ/e/g;
}

sub caracteres{
$t=shift;
#La fonction caracteres permet de remplacer tous les caractères sépciaux par des blancs ou par les lettres
#correspondant a ces caractères
$t=~s/[0-9]*//g;
$t=~s/&//g;
$t=~s/ [a-z] //g;
$t=~s/α/ /g;
$t=~s/oa¹/ /g;
$t=~s/β/ /g;
$t=~s/~/ /g;
$t=~s/a§/ /g;
$t=~s/a®/ /g;
$t=~s/a±/ /g;
$t=~s/oeœu/oeu/g;
$t=~s/oe“/oeu/g;
$t=~s/e“u/eu/g;
$t=~s/40a€¦/ /g;
$t=~s/sβaˆ / /g;
$t=~s/aˆ†f/ /g;
$t=~s/©/ /g;
$t=~s/@/ /g;
$t=~s/Ø/ /g;
$t=~s/ß/ /g;
$t=~s/ //g;
$t=~s/«Â//g;
$t=~s/’//g;
$t=~s/</ /g;
$t=~s/>/ /g;
$t=~s/&/ /g;
$t=~s/"/ /g;
$t=~s/Æ/ae/g;
$t=~s/æ/ae/g;
$t=~s/©/ /g;
$t=~s/Ç/c/g;
$t=~s/ç/c/g;
$t=~s/ç/c/g;
$t=~s/Ð/ /g;
$t=~s/°/ /g;
$t=~s/_/ /g;

$t=~s/ð/ /g;
$t=~s/Ø/ /g;
$t=~s/ø/ /g;
$t=~s/Þ/ /g;
$t=~s/þ/ /g;
$t=~s/ß/ /g;
$t=~s/a\|/ /g;
$t=~s/a¢/ /g;
$t=~s/a°/ /g;
$t=~s/aµ/ /g;
$t=~s/a //g;

$t=~s/…/oe/g;
$t=~s/Å/oe/g;
$t=~s/’/ /g;
$t=~s/œ/ /g;
$t=~s/¡/ /g;
$t=~s/¢/ /g;
$t=~s/£/ /g;
$t=~s/¤/ /g;
$t=~s/¥/ /g;
$t=~s/¦/ /g;
$t=~s/§/ /g;
$t=~s/¨/ /g;
$t=~s/©/ /g;
$t=~s/ª/ /g;
$t=~s/«/ /g;
$t=~s/¬/ /g;
$t=~s/­/ /g;
$t=~s/®/ /g;
$t=~s/¯/ /g;
$t=~s/°/ /g;
$t=~s/±/ /g;
$t=~s/²/ /g;
$t=~s/³/ /g;
$t=~s/´/ /g;
$t=~s/µ/ /g;
$t=~s/¶/ /g;
$t=~s/·/ /g;
$t=~s/¸/ /g;
$t=~s/¹/ /g;
$t=~s/º/ /g;
$t=~s/»/ /g;
$t=~s/¼/ /g;
$t=~s/½/ /g;
$t=~s/¾/ /g;
$t=~s/¿/ /g;
$t=~s/×/ /g;
$t=~s/Þ/ /g;
$t=~s/÷/ /g;
$t=~s/’/ /g;


# Autres caractères spéciaux :
$t=~s/°/ /g;
$t=~s/°/°/g;
$t=~s/a€™/ /g;
$t=~s/©/ /g;}

sub vide{
my $res=shift;
open(texte2,"<motsvides2.txt") or die"pb";

my @listemotsvides;


push @listemotsvides,$_ while(<texte2>);

map { chomp } @listemotsvides;
#print "@listemotsvides";
$res =~ s/b$_\b//g for @listemotsvides;
print "$res\n";
close (texte2);
}

sub balises{
$corps=shift;
#La fonction balises permet de supprimer toutes les balises
$corps=~s/<h1>/ /g;
$corps=~s/<select([^<]*)>/ /g;
$corps=~s/<!--([^<]*)-->/ /g;
$corps=~s/<map([^<]*)>/ /g;
$corps=~s/<area([^<]*)>/ /g;
$corps=~s/<a ([^<]*)>/ /g;
$corps=~s/<span([^<]*)>/ /g;
$corps=~s/<cr([^<]*)>/ /g;
$corps=~s/<title([^<]*)>/ /g;
$corps=~s/<html([^<]*)>/ /g;
$corps=~s/<head([^<]*)>/ /g;
$corps=~s/<body([^<]*)>/ /g;
$corps=~s/<meta([^<]*)>/ /g;
$corps=~s/<link([^<]*)>/ /g;
$corps=~s/<div([^<]*)>/ /g;
$corps=~s/<p([^<]*)>/ /g;
$corps=~s/<basefont([^<]*)>/ /g;
$corps=~s/<font([^<]*)>/ /g;
$corps=~s/<em([^<]*)>/ /g;
$corps=~s/<strong([^<]*)>/ /g;
$corps=~s/<code([^<]*)>/ /g;
$corps=~s/<kbd([^<]*)>/ /g;
$corps=~s/<var([^<]*)>/ /g;
$corps=~s/<address([^<]*)>/ /g;
$corps=~s/<blockquote([^<]*)>/ /g;
$corps=~s/<blink([^<]*)>/ /g;
$corps=~s/<strike([^<]*)>/ /g;
$corps=~s/<script([^<]*)>/ /g;
$corps=~s/<listing([^<]*)>/ /g;
$corps=~s/<big([^<]*)>/ /g;
$corps=~s/<small([^<]*)>/ /g;
$corps=~s/<sup([^<]*)>/ /g;
$corps=~s/<sub([^<]*)>/ /g;
$corps=~s/<i([^<]*)>/ /g;
$corps=~s/<b([^<]*)>/ /g;
$corps=~s/<tt([^<]*)>/ /g;
$corps=~s/<u([^<]*)>/ /g;
$corps=~s/<br([^<]*)>/ /g;
$corps=~s/<nobr([^<]*)>/ /g;
$corps=~s/<wbr([^<]*)>/ /g;
$corps=~s/<center([^<]*)>/ /g;
$corps=~s/<ul([^<]*)>/ /g;
$corps=~s/<li([^<]*)>/ /g;
$corps=~s/<ol([^<]*)>/ /g;
$corps=~s/<menu([^<]*)>/ /g;
$corps=~s/<pre([^<]*)>/ /g;
$corps=~s/<hr([^<]*)>/ /g;
$corps=~s/<a name([^<]*)>/ /g;
$corps=~s/<a href([^<]*)>/ /g;
$corps=~s/<img([^<]*)>/ /g;
$corps=~s/<table([^<]*)>/ /g;
$corps=~s/<caption([^<]*)>/ /g;
$corps=~s/<tr([^<]*)>/ /g;
$corps=~s/<th([^<]*)>/ /g;
$corps=~s/<td([^<]*)>/ /g;

$corps=~s/<\/([^<]*)>/ /g;
}
Ajouter un commentaire
Réponse
+0
moins plus
Tu as copié ton script entier?
tu peux joindre ton script sur cjoint.com et coller ici l'adresse de lien obtenu.

je vais voir ça à la maison en tranquillité

par exemple
#La fonction caracteres permet de remplacer tous les caractères sépciaux par des blancs ou par les lettres
#correspondant a ces caractères


et ici tu mets une liste entière quand une seule regex peu faire l'affaire


par exemple tous les caractères spéciaux (voir la table ASCII étendue) de C majuscules avec cédille Ç ( ascii 128, hexa 80) jusqu'à (ascii 255, hexa FF) on peut écrire
$t =~ s/[x80-xFF]//g;
au lieu de tous le listing que tu as utilisé.
Donc j'utilise une classe de caractères
Ajouter un commentaire
Réponse
+0
moins plus
http://cjoint.com/?cunyetu08k

voila le lien
bon bah ok je te laisse regarder ca mais sache qu'on est pas super douée en programmation dans ma classe et moi en particulier donc peut etre qu'il y a plein de fautes
là je dois partir bosser je reviens vers 18h 18h30
a plus et merci
Ajouter un commentaire
Réponse
+0
moins plus
while(@t=<texte>){
chomp(@t) ;
$t=join('',@t) ;


un chomp on le fait sur un scalaire pas un tableau
sur un tableau on a pop,push,shift,unshift

Et pourquoi sauvegarde le fichier dans un tableau?


Tu peux utiliser tout simplement la variable spécial $/ (mode slurp) pour que la variable $t avale le fichier entier

local $/;
$t=<texte>; # $t contient le fichier entier
Ajouter un commentaire
Réponse
+0
moins plus
alors au début on a utilisé des tableaux car on savait pas utiliser les fichiers directement
et le slurp je connais pas
je sens que tu vas te marrer en lisant le code car c'est plein de bétises
Ajouter un commentaire
Réponse
+0
moins plus
me revoilà
je ne sais pas si tu as pu regarder ou pas
mais si tu as pu se serait vraiment top !!
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

if ($t=~/<body[^>]*>(.*?)<\/body>/){
my $corps=$1;
#print "corps = $corps\n\n" ;
} 

je vois que tu as testé avec un print et il me semble que $corps est vide, n'est-ce pas?

essaie comme ça
if ($t=~/<body[^>]*>(.*)<\/body>/s){
my $corps=$1;
#print "corps = $corps\n\n" ;
} 

le métacaractères point . ne reconnaît pas le caractère fin de ligne \n donc il faut utiliser le modificateur de regex /s pour permettre que . reconnaisses \n

et pourquoi utilises-tu *? (quantificateur paresseux) ?
si tu veux que $t contiennes tous ce qui est compris entre <body> et </body> alors utilise .* (quantificateur gurmand)
Ajouter un commentaire
Réponse
+0
moins plus
bon je pige pas
le corps n'est pas vide
enfin j'ai changé avec ton truc donc ca ca marche
mais en fait ma fonction vide me supprime tous les mots du texte donc c'est pas super pratique
ca me rend tarée !!!
Ajouter un commentaire
Réponse
+0
moins plus
au lieu de
$res =~ s/b$_\b//g for @listemotsvides;

mets
$res =~ s/\b$_\b//g for @listemotsvides; 
Ajouter un commentaire
Réponse
+0
moins plus
j'avais déjà ca
ca marche toujours pas
en fait $res est vide ...
Ajouter un commentaire
Ce document intitulé «  substitution en Perl  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.