Komen faire un tableau d'un fichier en Perl?

Résolu/Fermé
Signaler
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
-
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
-
Bonjour

Je dois faire un exo en Perl dans lequel je dois comparer le contenu d'un fichier avec le contenu d'un texte que j'ai tapé simplementsur la "Konsole"(je travaille avecWinows)...
Donc j'ai mis les mots du texte tapé dans un tableau (tout va bien) et puis il faut que je mette le contenu d'un fichier .txt (qui est un texte de Rousseau)...et là : probleme ! :
donc j'ai ouvert mon fichier avec la commande open...or die...
la ça va mais aps ca j'ai ecrit dans mon script :
while ($ligne=<$fic>) {
@tab_motsfic=split (" ",$ligne);
}
et là, la prof m'a dit que ça ne me prendrait que la derniere ligne du fichier pour la comparaison...

Pourriez vous m'aider svp ????
Merci

21 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Salut,

tu peux utiliser le mode slurp pour capturer le contenu du fichier dans une variable, ensuite il te reste à comparer avec le texte

Soit plus précis, affiche ton code si tu en a un, si tu fait un tableau alors tu seras obligé de faire la même chose avec le texte et comparer chaque élément de tableau.
Dit l'énoncé de ton exo.

#!/usr/bin/perl
# ici tu dois avoir autre chose vu que tu es sur windows
use warnings;use strict;

{
   local $/;      # mode slurp
   my $fic = <>;  # je capture le contenu de fichier dans $fic
   print $fic;    # j'affiche le contenu de $fic
}
__END__
pour exemple applique le code au script lui même
pour voir le résultat

1
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
sinon pour mettre un fichier dans un tableau (je prends ton bout de code :-))
while ($ligne=<$fic>) {
    push @tab_motsfic,$ligne;
} 
Ton prof t'a expliquer pourquoi
et là, la prof m'a dit que ça ne me prendrait que la derniere ligne du fichier pour la comparaison...


quand tu fait

@tab_motsfic=split (" ",$ligne);

en fait à chaque passage ligne par ligne, le tableau est d'abord vidé de contenu et ensuite on lui affecte la ligne une par une jusqu'à la fin de fichier.

Donc à la fin il ne gardera que la dernière.


0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
Alor voila l énoncé demon exo et ce k j'ai fait jusqu'à present...:
Consigne : " Le programme va nous permettre de constituer un petit lexique et un petit vérificateur d'orthographe
- le programme demande l'utilisateu de saisir un texte (mot,phrase, phrases)
- cetexte saisi va etre scindé en mots, mis dans un tableau
- les mots de ce tableau vnt etre comparés à ceux contenus dans un fichier : on garde dans un tableau : mot_douteux les mots n'étant pas dans le fichier (c'est cette partie que e n'arrive pas à faire)
- chacun de ces mots (de mot_douteux) vont etre proposés à l'utilisateur pour vérification :
- si l'utilsateur confirme (nouveau mot, orthographe correcte) le mot sera rajouté dans le fichier
- sinon l'utilisateur refuse (probleme d'orthographe) : cette partie cbon elle marche...

Maintenant ce que j'ai fait ( en sachant que la fonction push ne marche pas) :

#!/usr/bin/perl

use strict;
use warnings;

my $texte;
my @tab_motstapes;
my $elt;
my $elt2;
my @tab_motsfic;
my $fic;
my $ligne;
my @mots_douteux;
my $trouve;
my $compteur;
my $compteur2;
my $elt3;
my $rep;
my $compteur3;


print ("saisir un texte autrement dit un mot ou une ou plusieurs phrases \n");
$texte=<STDIN>;
chomp ($texte);

$compteur=0;
$compteur2=0;
$compteur3=0;


@tab_motstapes=split(" ",$texte);

foreach $elt(@tab_motstapes) {

$compteur=$compteur+1;
print("$elt\n");

}

open $fic,'<',"fichier_exo_0107.txt" or die "fichier non ouvert\n";

while ($ligne=<$fic>) {

push (@tab_motsfic,$ligne);



foreach $elt2(@tab_motsfic) {

$trouve="oui";
$compteur2=$compteur2+1;

}
}

foreach $elt(@tab_motstapes) {

foreach $elt2(@tab_motsfic) {

if ($elt eq $elt2) {
$trouve="oui"; #c est bien mais que pour la derniere ligne

}

if ($elt ne $elt2) {
$trouve="non";
@mots_douteux=$elt;

}
}
}

print ("Le nombre de mots tapes est $compteur\n");
print ("Le nombre de mots du fichier est $compteur2\n");
print ("Les mots douteux sont @mots_douteux\n");

close ($fic);

open $fic,'>>',"fichier_exo_0107.txt" or die "fichier non ouvert\n";

foreach $elt3(@mots_douteux) {

print ("Ces mots @mots_douteux vous sont proposes pour verification. Si son(leur) orthographe est correcte ou qu'il s'agit d'un nouveau mot, dites oui; sinon s'il ya un probleme d'orthographe, refusez\n");
$rep=<STDIN>;
chomp ($rep);

if ($rep eq "oui") {

print $fic "$elt3\n";
$compteur2=$compteur2+1;
$compteur3=$compteur3+1;


}

else {

$rep="non";
$compteur2=$compteur2;
}
}
print ("Le nombre de mots ajoutes au fichier apres leur verification est $compteur3\n");
print ("Le nombre de mots du fichier est maintenant de $compteur2\n");

close $fic;
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Comme tu ne l'as pas dit, j'ai suppose que ton fichier original contient un mot par ligne

Voila le fichier sur lequel je teste mon code
fichier.txt
mot
fichier
texte
je
insertion
faire
mettre
perl
programme
table
script
ouvert
mais
bien
pour
la
dernière
ligne
oui
non
trouver
compteur
Chaque exécution de script sauvagarde le dernier fichier original (donc on peut toujours retourner un pas un arrière, mais pas 2 :-)) Le fichier sauvegardé aura le nom fichier_original.txt

Voilà un exemple


je vais taper la phrase (qui ne dit pas la verité :-))
Je ne suis pas bien

les mot ne, suis et pas n'existe pas dans le fichier
je vais repondre oui partout
debian:~/trash# perl karinn.pl
Saisissez un mot ou une phrase :
je ne suis pas bien
Le nombre de mots tapés est : 5
Le nombre de mots de fichier est : 22
Il y a 3 qui ne sont pas dans le ficher:
ne suis pas
Voulez-vous ajouter le mot ne au fichier? O[ui] ou N[on] : o
Voulez-vous ajouter le mot suis au fichier? O[ui] ou N[on] : o
Voulez-vous ajouter le mot pas au fichier? O[ui] ou N[on] : o
debian:~/trash#
Le résultat
debian:~/trash# cat fichier.txt
mot
fichier
texte
je
insertion
faire
mettre
perl
programme
table
script
ouvert
mais
bien
pour
la
dernière
ligne
oui
non
trouver
compteur
ne
suis
pas
Voici le script (c'est totalement différent de ce que tu veux faire, en bref c'est plus perlien en comparaison avec ton code que s'approche de C par exemple :-)) j'aime bien le C :-))))
#!/usr/bin/perl
#
use warnings;use strict;

my (@mots_douteux,@fic);
my %dans_fichier;
my ($fichier,$temp) = ("fichier.txt", "temp.txt");

# ouverture de fichier en lecture
open F_LIRE, "$fichier"
    or die "E/S: $!\n";

# ouverture de fichier temporaire en mode ajout
open F_ECRIRE, ">>$temp"
    or die "E/S: $!\n";

# sauvagarde fichier dans un tableau
# en même temp je fait un chomp sur chaque element
map { chomp } @fic = <F_LIRE>;

# je sauvegarde le contenu de fichier original
print F_ECRIRE "$_\n" foreach @fic;

# début de programme
print "Saisissez un mot ou une phrase :\n";

chomp(my $texte = <STDIN>);
$texte =~ s/\W/ /g;                  # remplace signes punctuation avec un espace
my @mot_texte = split /\s+/, $texte; # pour split

# aide mémoire pour trouver les mots 
# qui n'existent pas dans le fichier
@dans_fichier{@fic} = ();

# sauvegarde des mots inexistants dans le fichier
foreach (@mot_texte){
  push @mots_douteux,$_  unless exists $dans_fichier{$_};
}

print "Le nombre de mots tapés est : ", @mot_texte+0,"\n";
print "Le nombre de mots de fichier est : ",@fic+0,"\n";
print "Il y a ",@mots_douteux+0," qui ne sont pas dans le ficher:\n";
print "@mots_douteux\n";

# traitment de mots trouvés
foreach (@mots_douteux){
  print "Voulez-vous ajouter le mot $_ au fichier? O[ui] ou N[on] : ";
  chomp(my $rep = <STDIN>);
  print F_ECRIRE "$_\n" if $rep =~ /o(ui)?/i;  
}
close F_LIRE;
close F_ECRIRE;

rename($fichier,"fichier_original.txt")
     or die "E/S : $!";
rename ($temp,$fichier)
     or die "E/S : $!\n";
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Et si tu veux que le fichier soit trier par ordre alphabétique
#!/usr/bin/perl
use warnings;use strict;

my (@mots_douteux,@fic);
my %dans_fichier;
my ($fichier,$temp) = ("fichier.txt", "temp.txt");

# ouverture de fichier en lecture
open F_LIRE, "$fichier"
    or die "E/S: $!\n";

# ouverture de fichier temporaire en mode écriture
open F_ECRIRE, ">$temp"
    or die "E/S: $!\n";

# sauvagarde fichier dans un tableau
# en même temp je fait un chomp sur chaque element
map { chomp } @fic = <F_LIRE>;

# début de programme
print "Saisissez un mot ou une phrase :\n";

chomp(my $texte = <STDIN>);
$texte =~ s/\W/ /g;                  # remplace signes punctuation avec un espace
my @mot_texte = split /\s+/, $texte; # pour split

# aide mémoire pour trouver les mots 
# qui n'existent pas dans le fichier
@dans_fichier{@fic} = ();

# sauvegarde des mots inexistant dans le fichier
foreach (@mot_texte){
  push @mots_douteux,$_  unless exists $dans_fichier{$_};
}

print "Le nombre de mots tapés est : ", @mot_texte+0,"\n";
print "Le nombre de mots de fichier est : ",@fic+0,"\n";
print "Il y a ",@mots_douteux+0," qui ne sont pas dans le ficher:\n";
print "@mots_douteux\n";

# traitment de mots trouvés
foreach (@mots_douteux){
  print "Voulez-vous ajouter le mot $_ au fichier? O[ui] ou N[on] : ";
  chomp(my $rep = <STDIN>);
  push @fic,$_ if $rep =~ /o(ui)?/i;  
}
# écriture dans le fichier temporaire
# et tri par ordre alphabétique
print F_ECRIRE "$_\n" foreach sort @fic;

close F_LIRE;
close F_ECRIRE;

# sauvegarde de fichier original
rename($fichier,"fichier_original.txt")
     or die "E/S : $!";

# le nouveau fichier
rename ($temp,$fichier)
     or die "E/S : $!\n";
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
Merci !!!...mais le probleme c'est qu'en cours on a vraiment pas vu ca du tout (map et d'autres syntaxes) lol.
Donc, en gros j peux pas trop me servir de ca pask sinon la prof va se demander d'ou j sors tout ca...c trop perlien lol...
Je ne critique pas attention ! c'est juste que voila...
je te remercie qd meme pour ton aide !! tu m'as qd meme aidé a comprendre certaines choses...
voila...
bye
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
ah oui et j voulais te dire aussi...c vrai k j'avais oublié de preciser que le fichier est un texte...
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
c'est qu'en cours on a vraiment pas vu ca du tout (map et d'autres syntaxes) lol.

ben, alors peut être que ton prof devra vous apprendre

ai-je bien compris ton exercice ou pas?

en ce qui concerne les compteurs tu n'as pas besoin?

pour connaître le nombre d'éléments d'un tableau tu as plusieurs possibilités en Perl

@tableau+0;
scalar @tableau
$#tableau+1;

donne le même résultat = le nombre d'éléments d'un tableau

Dans une situation comme la tienne c'est bien d'utiliser les hash.
En fait pour trouver les mots douteux je cherche les éléments qui sont dans le tableau obtenu après la saisie et qui ne sont pas dans le fichier

map c'est une fonction qui agit sur les éléments d'un tableau

au lieu de faire un foreach je fait un map (si tu ne sais pas, les perliens sont des paresseux, demande ton prof et tu verras :-))

et apprends à bien écrire ton code.

En ce qui concerne la fonction push, il faut la comprendre

Voilà ce que tu as dans ton code

while ($ligne=<$fic>) {

push (@tab_motsfic,$ligne);



foreach $elt2(@tab_motsfic) {


Tu devras avoir
while ($ligne=<$fic>) {         # pour chaque ligne de fichier
    push (@tab_motsfic,$ligne); # ajoute au tableau l
}                               # j'ai supposé que chaque ligne c'est un seule mot
                                # sinon tu seras obligé de spliter
                                # chaque ligne, avant d'ajouter au tableau
# ici je ferme le bloc de while
# dorénavant j'utilise le tableau
# qui contient le fichier


foreach $elt2(@tab_motsfic) { 

0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
Ce que tu as dit en dernier à propos de la fonction push et avec le split je l'essaierai tout a l'heure...mais c'est vrai que c'est une bonne idée...donc si je comprends bien : je dois faire mon split avant de faire le push...(donc utiliser while...@tab_motsfic=split(" ",$ligne)...on est bien d'accord ? lol)
sinon ben en fait pour les fonctions map etc on verra ptetr ca au second semestre en cours...je ne sais pas...lol
Mais j'avais oublié de te dire aussi que je travaille avec Crimson Editor, c'est pour ça que je t'ai dit hier que c'était trop perlien lol...j'espere que tu ne l'as pas mal pris...:-)
En tout cas je te le redis merci pour ton aide...et t'inquiete pas tu as compris l'exo lol...
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
Re ! lol...
Alors en fait j'ai essayé avec le split avant et ca ne marche pas...j'ai l'impression que ca me prend toujours la derniere ligne lol...Je t'explique :
En fait les compteurs me servent à vérifier que tout est ok surtout pour le nombre de mots du fichier ; en fait je les avais compté avec Word et il y en a 980 (alors peut etre que c'est un trop gros fichier ?) et quand je mets la fonction split toute seule il me compte bien les 980 mots et si je les fait afficher il me les affiche.Normal quoi ! lol...
si je rajoute la fonction push en dessous il me compte 983 mots et je ne comprends pas prquoi...et le probleme c'est que j'ai testé mon programme avec des mots qui étaient dans mon fichier et il me met le dernier mot tapé dans le tableau des mots douteux...meme avec la fonction push..
:-s
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Re,

alors peut etre que c'est un trop gros fichier ?)
tu rigoles!!! :-)) j'ai parsé des fichiers plus de 10 millions lignes.

Mets ton fichier sur cjoint.com et je verrai ce soir.

Perso, j'utilise vi ou vim pour écrire du code (que ça soit Perl ou C)

Tu n'as pas besoin de compteurs puisque tu peut utiliser les tableaux, je vais arranger le code pour qu'il soit plus proche de ce que tu fais mais j'ai besoin de ton fichier .
en ce qui concerne split et push, je suppose que tu n'utilise pas bien ces fonctions

En général je préfére de connaître le fichier sur lequel on travail.
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
cjoint.com...???
ok...c un site ?...ya un lien pour ca sur CCM ?
bon j vais chercher ou c'est pdt ce tps là lol
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
j'ai trouvé le site mais ou j peux te l'envoyer mon fichier ?
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Tu vas sur https://www.cjoint.com/
ensuite tu fait clic sur Parcourir pour choisir le fichier
ensuite tu gait clic sur Créer le lien Cjoint

tu mets ici le lien

Sinon, plus simple dans mon profil tu as mon mail
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
voila j crois k c bon.jt'ai envoyé mon fichier...j'ai fait comme tu m'as dit pour le lien...j'espere juste k j me suis pas plantée...
voila...
par contre j'ai pas trouvé ton mail dans ton profil...
bye
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Et le lien il est où?
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
tu sais quoi ? j te mets le fichier direct comm ca...et tu le mettas dans le bloc notes....lol


Mon fichier :

Me voici donc seul sur la terre, n'ayant plus de frère, de prochain, d'ami, de société que moi-même Le plus sociable et le plus aimant des humains en a été proscrit. Par un accord unanime ils ont cherché dans les raffinements de leur haine quel tourment pouvait être le plus cruel à mon âme sensible, et ils ont brisé violemment tous les liens qui m'attachaient à eux. J'aurais aimé les hommes en dépit d'eux-mêmes. Ils n'ont pu qu'en cessant de l'être se dérober à mon affection. Les voilà donc étrangers, inconnus, nuls enfin pour moi puisqu'ils l'ont voulu. Mais moi, détaché d'eux et de tout, que suis-je moi-même ? Voilà ce qui me reste à chercher. Malheureusement cette recherche doit être précédée d'un coup d'oeil sur ma position. C'est une idée par laquelle il faut nécessairement que je passe pour arriver d'eux à moi.
Depuis quinze ans et plus que je suis dans cette étrange position, elle me paraît encore un rêve. Je m'imagine toujours qu'une indigestion me tourmente, que je dors d'un mauvais sommeil et que je vais me réveiller bien soulagé de ma peine en me retrouvant avec mes amis. Oui, sans doute, il faut que j'aie fait sans que je m'en aperçusse un saut de la veille au sommeil, ou plutôt de la vie à la mort. Tiré je ne sais comment de l'ordre des choses, je me suis vu précipité dans un chaos incompréhensible où je n'aperçois rien du tout ; et plus je pense à ma situation présente et moins je puis comprendre où je suis.
Eh ! comment aurais-je pu prévoir le destin qui m'attendait ? comment le puis-je concevoir encore aujourd'hui que j'y suis livré ? Pouvais-je dans mon bon sens supposer qu'un jour, moi le même homme que j'étais, le même que je suis encore, je passerais, je serais tenu sans le moindre doute pour un monstre, un empoisonneur, un assassin, que je deviendrais l'horreur de la race humaine, le jouet de la canaille, que toute la salutation que me feraient les passants serait de cracher sur moi, qu'une génération tout entière s'amuserait d'un accord unanime à m'enterrer tout vivant ? Quand cette étrange révolution se fit, pris au dépourvu, j'en fus d'abord bouleversé. Mes agitations, mon indignation me plongèrent dans un délire qui n'a pas eu trop de dix ans pour se calmer, et dans cet intervalle, tombé d'erreur en erreur, de faute en faute, de sottise en sottise, j'ai fourni par mes imprudences aux directeurs de ma destinée autant d'instruments qu'ils ont habilement mis en oeuvre pour la fixer sans retour. Je me suis débattu longtemps aussi violemment que vainement. Sans adresse, sans art, sans dissimulation, sans prudence, franc, ouvert impatient, emporté, je n'ai fait en me débattant que m'enlacer davantage et leur donner incessamment de nouvelles prises qu'ils n'ont eu garde de négliger. Sentant enfin tous mes efforts inutiles et me tourmentant à pure perte, j'ai pris le seul parti qui me restait à prendre, celui de me soumettre à ma destinée sans plus regimber contre la nécessité. J'ai trouvé dans cette résignation le dédommagement de tous mes maux par la tranquillité qu'elle me procure et qui ne pouvait s'allier avec le travail continuel d'une résistance aussi pénible qu'infructueuse. Une autre chose a contribué à cette tranquillité. Dans tous les raffinements de leur haine, mes persécuteurs en ont omis un que leur animosité leur a fait oublier ; c'était d'en graduer si bien les effets qu'ils pussent entretenir et renouveler mes douleurs sans cesse en me portant toujours quelque nouvelle atteinte. S'ils avaient eu I adresse de me laisser quelque lueur d'espérance ils me tiendraient encore par là. Ils Pourraient faire encore de moi leur jouet par quelque faux leurre', et me navrera ensuite d'un tourment toujours nouveau par mon attente déçue. Mais ils ont d'avance épuisé toutes leurs ressources ; en ne me laissant rien ils se sont tout ôté à eux-mêmes. La diffamation la dépressions, la dérision, l'opprobre dont ils mont couvert ne sont pas plus susceptibles d'augmentation que d'adoucissement ; nous sommes également hors d'état, eux de les aggraver et moi de m'y soustraire. Ils se sont tellement pressés de porter à son comble la mesure de ma misère que toute la puissance humaine, aidée de toutes les ruses de l'enfer, n'y saurait plus rien ajouter. La douleur physique elle-même au lieu d'augmenter mes peines y ferait diversion. En m'arrachant des cris, peut-être, elle m'épargnerait des gémissements, et les déchirements de mon corps suspendraient ceux de mon coeur. Qu'ai-je encore à craindre d'eux puisque tout est fait ? Ne pouvant plus empirera mon état ils ne sauraient plus m'inspirer d'alarmes. L'inquiétude et l'effroi sont des maux dont ils m'ont pour jamais délivré : c'est toujours un soulagement. Les maux réels ont sur moi peu de prise ; je prends aisément mon parti sur ceux que j'éprouve, mais non pas sur ceux que je crains. Mon imagination effarouchée les combine, les retourne, les étend et les augmente. Leur attente me tourmente cent fois plus que leur présence, et la menace m'est plus terrible que le coup. Sitôt qu'ils arrivent, l'événement, leur ôtant tout ce qu'ils avaient d'imaginaire, les réduit à leur juste valeur. Je les trouve alors beaucoup moindres que je ne me les étais figurés, et même au milieu de ma souffrance je ne laisse pas de me sentir soulagé. Dans cet état, affranchi de toute nouvelle crainte et délivré de l'inquiétude de l'espérance, la seule habitude suffira pour me rendre de jour en jour plus supportable une situation que rien ne peut empirer, et à mesure que le sentiment s'en émousse par la durée ils n'ont plus de moyens pour le ranimer. Voilà le bien que m'ont fait mes persécuteurs en épuisant sans mesure tous les traits de leur animosité. Ils se sont ôté sur moi tout empire, et je puis désormais me moquer d'eux.



Voila
bye
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Alors tu n'as pas compris.

je n'ai pas besoin de fichier comme ça, puisque ce n'est pas la même chose (je parle de la mise en page, de caractère que j'ai à la fin de ligne)

donc utilise cjoint.com et donne moi le lien pour pouvoir le télécharger

le contenu de ton fichier dans cet état peut générer des résultats imprevisilbes

donc fait un effort
merci
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
et dans mon profil lami20j tu ne vois pas mon e-mail?!
0
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
voila j'ai trouvé ton adresse mail (en fait tout a leur j m'etais pas identifiée c pour ca)...jt'ai envoyé mon fichier et mon script dessus
bye
0
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 566
Salut,

je préfére de mettre le code ici, il pourra peut être servir à d'autres cas
#!/usr/bin/perl
use strict;use warnings;

my ($compteur1,$compteur2,$compteur3)=(0,0,0);
my (@tab_motstapes, @tab_motsfic, @mots_douteux);
my %que_dans_tab_motstapes;
my ($e,$rep,$fic,$elt3);


print "Saisir un texte autrement dit un mot ou une ou plusieurs phrases \n";

$_=<STDIN>;
@tab_motstapes=split;

# en perl on peut dire de façon naturelle
# affiche quelque chose pour chaque élément
# d'un tableau
print "$_\n" foreach (@tab_motstapes);
$compteur1=@tab_motstapes+0;


open $fic,'<',"fichier_exo_0107.txt" or die "fichier non ouvert\n";
# je stocke les mots de fichier dans un tableau
while (<$fic>) {
  for $e(split){
    push @tab_motsfic,$e;
  }
}

# pas besoin de faire un boucle
# avec un compteur
# en Perl si on utilise le tableau
# dans un contexte scalaire on obtient
# le nombre d'élémnents
$compteur2=@tab_motsfic+0;

# ici je vais commencer le traitement
# pour obtenir les mots douteux
# pour ça j'utilise un hash
# vu que les clés d'un hash sont unique
# c'est facile de trouver les mots tapés
# qui ne se trouve pas dans le fichier
@que_dans_tab_motstapes{@tab_motsfic}=();

# donc pour chaque mot tapé
# je stocke seulement les mots
# qui ne sont pas parmi les clés de hash
# ce qui veut dire que sont que dans
# le tableau de mots tapés
foreach(@tab_motstapes){
  push @mots_douteux,$_ unless exists $que_dans_tab_motstapes{$_};
}

# toujours tableau en contexte scalaire
# nous donne le nombre d'éléments

$compteur3 = @mots_douteux+0;

print "Le nombre de mots tapes est $compteur1\n";
print "Le nombre de mots du fichier est $compteur2\n";
print "Les mots douteux sont $compteur3\n";

close ($fic);
# écriture dans le fichier
#
open $fic,'>>',"fichier_exo_0107.txt" or die "fichier non ouvert\n";
$compteur3 = 0;
foreach $elt3(@mots_douteux) {
	print "Ces mots @mots_douteux vous sont proposes pour verification.\n";
	print "Si son(leur) orthographe est correcte ou qu'il s'agit d'un nouveau mot,\n";
	print "dites oui; sinon s'il ya un probleme d'orthographe, refusez\n";
	chomp($rep=<STDIN>);
  
  if ($rep eq "oui") {
    print $fic "$elt3\n";
    $compteur2++;
    $compteur3++;
  } else {
    $rep="non";
    $compteur2=$compteur2;
  }    
}
print "Le nombre de mots ajoutes au fichier apres leur verification est $compteur3\n";
print "Le nombre de mots du fichier est maintenant de $compteur2\n";
close $fic;
__END__
L'utilisation des boucles imbriquées foreach
n'est pas souhaitable.
J'ai essayé de ne pas trop compliqué ton travail.
Cependant je n'ai pas pu m'abtenir d'utiliser certains 
téchniques Perl
Par exemple

au lieu de
$texte = <STDIN>;
chomp ($text);

on peut écrire
chomp($text = <STDIN>);

Pour print, pas besoin d'utiliser les paranthèses
on n'est pas en C
perl "hello, monde!";

Ca marche aussi
perl ("hello, monde!");

mais les paranthèses sont totalement inutiles;

Au lieu de 
$n = $n + 1;

on peut écrire

$n += 1;

et même

$n++;
0