Substitution en Perl

Résolu
nanou2183 Messages postés 48 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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
Configuration: Windows XP
Internet Explorer 6.0

29 réponses

  • 1
  • 2
  1. nanou2183 Messages postés 48 Statut Membre 11
     
    je viens de me rendre compte d'une erreur dans la substitution c'est $element mais ca change rien à mon résultat
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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;


    0
    1. nanou2183 Messages postés 48 Statut Membre 11
       
      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à
      0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    

    0
  4. nanou2183 Messages postés 48 Statut Membre 11
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nanou2183 Messages postés 48 Statut Membre 11
     
    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
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    #!/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__
    
    0
    1. nanou2183 Messages postés 48 Statut Membre 11
       
      bon bah je sais pas ce qu'il y a mais ca marche pas
      ca me renvoie plus rien maintenant
      0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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.

    0
    1. nanou2183 Messages postés 48 Statut Membre 11
       
      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
      0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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 :-))

    0
  10. nanou2183 Messages postés 48 Statut Membre 11
     
    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 !!!!
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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 ;-)
    0
  12. nanou2183 Messages postés 48 Statut Membre 11
     
    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/&nbsp//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;
    }
    0
  13. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    0
  14. nanou2183 Messages postés 48 Statut Membre 11
     
    https://www.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
    0
  15. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    0
  16. nanou2183 Messages postés 48 Statut Membre 11
     
    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
    0
  17. nanou2183 Messages postés 48 Statut Membre 11
     
    me revoilà
    je ne sais pas si tu as pu regarder ou pas
    mais si tu as pu se serait vraiment top !!
    0
  18. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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)
    0
  19. nanou2183 Messages postés 48 Statut Membre 11
     
    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 !!!
    0
  20. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    au lieu de
    $res =~ s/b$_\b//g for @listemotsvides;

    mets
    $res =~ s/\b$_\b//g for @listemotsvides; 
    0
  21. nanou2183 Messages postés 48 Statut Membre 11
     
    j'avais déjà ca
    ca marche toujours pas
    en fait $res est vide ...
    0
  • 1
  • 2