PERL

Résolu/Fermé
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 - 2 nov. 2009 à 20:35
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 - 11 nov. 2009 à 20:18
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

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 nov. 2009 à 21:29
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.
0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
2 nov. 2009 à 21:57
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.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 nov. 2009 à 22:05
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


0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
8 nov. 2009 à 00:45
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.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
8 nov. 2009 à 01:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
8 nov. 2009 à 17:23
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 ++.
0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
8 nov. 2009 à 17:48
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;
0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
10 nov. 2009 à 00:32
Salut,
personne??
0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
11 nov. 2009 à 19:09
Salut,
toujours personne?? :(
0
otakuu Messages postés 302 Date d'inscription dimanche 14 octobre 2007 Statut Membre Dernière intervention 13 mai 2014 38
11 nov. 2009 à 20:18
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.
0