PERL [Résolu/Fermé]

Signaler
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
-
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
-
Bonjour,
à plusieurs tentative d'essayer d'écrire du texte d'un fichier dans un autre fichier avec le langage PERL hélas j'y arrive pas et ça m'affiche aucune erreurs. par contre pour créer un fichier et afficher son contenu ça marche très bien.

voila le bout de code que j'ai utiliser ( biensur en prealable j'ai creer les fichiers ecrire.txt et lire.txt ou j'ai ecris un petit message genre : salut la terre !!)

open(LIRE,"lire.txt") ;

open(ECRIRE,">ecrire.txt") ;

while () {
print ECRIRE $_;

}

close(LIRE);

close(ECRIRE);

quand je clique sur le fichier ecrire.txt une petite fenetre me dit que ce fichier à etais modier et si je veux enregister = > alors moi je clique sur "save" mais aprés y'a rien d'afficher :-s.

ps: je travail sous eclipse avec le plugin de perl, mais meme avec open perl ide ça ne marche pas.

Si quelqu'un connais, pourriez me dire commentcamarche?

merci l'équipe.

9 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 543
Salut,

Ton code n'est pas correct (la boucle while plus exact)
open(LIRE,"lire.txt") ;

open(ECRIRE,">>ecrire.txt") ;

while (<LIRE>) {
  print ECRIRE $_;
}

close(LIRE);
close(ECRIRE); 


Personnellement je te conseille d'oublier Eclipse, open perl ide, etc.
Choisi un éditeur de texte, par exemple scite et exécute tes scripts depuis la console DOS.
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Merci pour votre réponse.
je fais meme du c/c++ avec eclipse :-s j'ai trop l'habitude de l'utiliser mais bon je peux faire comme vous me dites la mais là j'ai comme un doute sur ce que je crois que ce code fait... si je ne me trompe pas normalement si j'écris "salut le monde" dans le lire.txt et que j'exécute ce programme là je dois trouver "salut le monde" dans ecrire.txt?
par ce que je vien de faire la comme vous me dite avec l'éditeur notepad(puisqu'il est déjà installer chez moi) mais ca me fait la même chose que sous eclipse,
this file has been modified by another programm.
Do you want to reload it?
et voila une fois que je clique sur Ok ecire.txt est tjrs aussi blanc aucune trace de texte.
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Re,

Je ne comprends pas.
Il n'y a rien à cliquer et ça doit marcher.

Tu ouvre une console DOS et tu exécutes ton script.
Vaut mieux utiliser des chemins complets pour tes fichiers ou t'assurer que le script se trouve dans le même répertoire que les fichiers texte.

Voici un exemple

lami20j@debian:~$ cat lire.txt
salut le monde
lami20j@debian:~$ cat ecrire.pl
#!/usr/bin/perl
use strict;use warnings;

open(LIRE,"lire.txt") ;
open(ECRIRE,">>ecrire.txt") ;

while (<LIRE>) {
  print ECRIRE $_;
}
close(LIRE);
close(ECRIRE);
lami20j@debian:~$ perl ecrire.pl
lami20j@debian:~$ cat ecrire.txt
salut le monde
lami20j@debian:~$ perl ecrire.pl
lami20j@debian:~$ cat ecrire.txt
salut le monde
salut le monde
lami20j@debian:~$ perl ecrire.pl
lami20j@debian:~$ cat ecrire.txt
salut le monde
salut le monde
salut le monde


Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Salut lami20j,
Merci pour votre aide ça m'a beaucoup aidé.
je profite pour vous poser une autre question:
je veux lemmatiser une phrase exemple @phrase=("salut","le","monde") et à coté j'ai créer un fichier motvide.txt ou y'a des mots vides que je dois éliminer après dans la @phrase.
en fait voila j'ai fait
@motvide = <MOTVIDE>;
et donc là j'ai recuperer tout les mots vide en un tableau @motvide et le problème est que y'a des mots qui sont copier dans des case du tableau @motvide avec de l'espace devant, ce qui cause problème lorsque je veux comparer (eq) un mot de ma @phrase et un mot du @motvide( le problème est que je risque d'avoir "le" != "le " à cause de l'espace qui y'a devant le "le "). voila donc est ce qu'il y'a un moyen de pouvoir copier tout les élément du fichier motvide.txt en un tableau sans les espace genre comme chop qui lui élimine les retour chariot.
j'espere que vous m'avez compris.
bonne nuit @u revoir.
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
143
j'espere que vous m'avez compris.
Bien sûr, nous sommes sur la même longieur d'onde; d'ailleurs moi aussi je lemmatise beaucoup mais surtout le matin sauf quand c'est le soir ;-)
Quant aux espaces, pour les supprimer, n'hésite pas à utiliser l'opérateur de substitution (s///), un des piliers de Perl.
Bonne continuation.
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Salut,
Merci loupius ;) ça marche nickel. Tu m'as sauvé la vie mec !!

open(MOTVIDE,"motvide.txt");

chomp(@tab=<MOTVIDE>);
for($i=0;$i<=$#tab;$i++)
{
$tab[$i] =~ s/ //;
}

print @tab;

@ la prochaine ++.
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
euh... Re :-s
j'ai comme un pti souci là. quand j'essai de supprimer les mot vide de la phrase que l'utilisateur va entrée bah ça marche pas (comme si dans ma table @ligne y'a pas de mot vide qui correspondant a un mot vide que l'utilisateur a insérer dans sa phrase, alors que moi j'ai fait exprès d'insérer une phrase avec des mots vides) c'est très bizzar car ça l'air vraiment d'être bon mais quand j'exécute ça fait rien :-s

voila le code alors si vous voyez ou ça cloche fait moi signe svp je vous serez très reconnaissant merci.

open(VIDE,"vide.txt");
chop(@ligne = <VIDE>);

for($i=0;$i<=$#tab;$i++)
{
$ligne[$i] =~ s/ //;
}

print "donner une phrase: \n";
chop ($phrase= <STDIN>);

#split: separe une chaine de caractere en plusieurs mots dans un tableau de caractere ;)
#join: fonctionne comme split mais pour passer d'un tableau a une chaine de caractere ;)


@tab = split (/ /,$phrase);


for($i=0; $i<$#tab; $i++)
{
for($j=0; $j<$#ligne; $j++)
{
if($tab[$i] eq $ligne[$j])
{
@tab = @tab [0..($i-1),($i+1)..$#tab];
}
}
}

print @tab;
#$nbr_elt_ligne = @phrase;
#$x = $#phrase;
#print @tab;
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Salut,
personne??
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Salut,
toujours personne?? :(
Messages postés
302
Date d'inscription
dimanche 14 octobre 2007
Statut
Membre
Dernière intervention
13 mai 2014
38
Salut,
oooh l'erreur. impardonnable !!!

for($i=0;$i<=$#tab;$i++)
{
$ligne[$i] =~ s/ //;
}

au lieu de tab faillais que je mette ligne :-s
c'est très bête.