Je besoin de faire une programme en perl [Fermé]

Signaler
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
Bonjour, je besoin d' ecrire un programme en perl sous linux qui compte les mots se trouvant dans un fichier dont le nom est passé en argument au programme.
sincerement merci.

17 réponses

Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Salut, tu as des bases en perl? Car nous on veut bien te donner des pistes, mais on va pas te faire un code tout beau tout propre! ;-)

nom je viens de debut perl et j'avais des retards par rapport au autres etudiant ,donc je voulai vraiment que vous m'aidiez merci;
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Bah fait un peu de recherches, nous on ne te donnera que des pistes. A toi de faire le travail ;-)

oki donne moi des piste ou des astuces a suivre pour faire sa sous linux
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Donc. Ton programme comportera déjà:

#! /usr/bin/perl
En première ligne. C'est l'interpréteur, pour éviter de toujours taper "perl monfichier.pl". Ensuite, l'extension sera ".pl". POur finir, tu auras sans doute quelque chose de ce genre pour commencer:

#! /usr/bin/perl

chomp(my $mot=<STDIN>) ; #pour lire le mot donné en argument.

Je précise qu'après le # ce sont des commentaires, tu n'es pas obligé de les mettre dans ton programme.

il m'affiche cette erreur quand j tape chomp(my $mot=<STDIN>) ; et que je touche rentrer s'il vous plait pouvez vous m'aider

bash: syntax error near unexpected token `my'
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,

En première ligne. C'est l'interpréteur, pour éviter de toujours taper "perl monfichier.pl".

Il faut s'assurer qu'il y a les droit d'exécutions sur le fichier sinon, malgré le shebang on sera obliger de faire perl monfichier.pl


chomp(my $mot=<STDIN>) ; #pour lire le mot donné en argument.
Ben, non.
STDIN lit depuis l'entrée standard
my $mot;
chomp($mot = <STDIN>);


Les arguments du script on les trouves dans @ARGV

Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Merci de la correction Lami20j ;-)

je creer creer un fichier dans mon bureau et je faite une programme qui peut ouvrir se fichier la voila

#! /usr/bin/perl

open (LEC , "<"test.txt");

whyle ($ ligne =<LEC>)

print $_;
}

j'ai enregistrer sous mot.pl sur mon bureau
comment pourai-je l'execute et voir si il marche ou pas je travail sous linux et je tape mon code sur l'editeur de texte.pouvez vous m'aide d'execute et de me corriger si il ya des erreur.

et je voulai compter les mots qui se trouve dans se fichier
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Il faut que tu fasses: chmod +x monfichier.pl puis après, que tu te place dans le dossier et que tu tapes ./monfichier.pl pour le lancer ;-)

enfai moi je enregistrer mon code mot.pl
et si je fai chmod +x mo.pl
il m'affiche sa
chmod: ne peut accéder `mot.pl': Aucun fichier ou répertoire de ce type
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Fais cd ~/Bureau puis chmod +x fichier.pl ;-))
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,

Tu as des erreurs dans ton script (j'ai ajouté une gestion d'erreur au cas où)
Il n'y a pas d'espace entre $ et ligne
Si tu utilise la variable $ligne tu dois faire print $ligne pas print $_
#! /usr/bin/perl 

open LEC , "<test.txt" or die "E/S : $!\n";

while ($ligne =<LEC>) 
  print $ligne; 
} 
--
106485010510997108
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,

Pour compter les mots il faut savoir la structure de ton fichier.
Quel caractère veux tu utiliser pour séparer les mots?

j utilise un espace pour separer mes mots
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,

Ca ne marche pas comme ça ;-)

Essaie (je n'ai pas testé)

#! /usr/bin/perl 
use strict;use warnings;
open LEC , "<test.txt" or die "E/S : $!\n";
my $compteur;

while (my $ligne =<LEC>) {
  my @mots;
  next if /^$/;
  @mots=split /\s+/, $ligne;
  $compteur += scalar @mots ;
} 

print "Le fichier a $compteur mot(s)\n";
__END__


Pour exécuter : perl script.pl fichier
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
486
Salut, j'ai testé, cela renvoie:

E/S : Aucun fichier ou dossier de ce type

;-)
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 >
Messages postés
4143
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011

Re,

Ben, il suffit de créer un fichier que tu l'appelles fichier et dédans tu écrit quelque mots separés par des espaces.

j arrive pa a excecute le programme svp.j ai enregistrer un dossier dans mon bureau mai iln m'affiche une ereur comme ce si bash: chomp: command not found



#! /usr/bin/perl
use strict;use warnings;
open LEC , "<test.txt" or die "E/S : $!\n";
my $compteur;

while (my $ligne =<LEC>) {
my @mots;
next if /^$/;
@mots=split /\s+/, $ligne;
$compteur += scalar @mots ;
}

print "Le fichier a $compteur mot(s)\n";
__END__
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,

Il n'y a pas de chomp dans mon code.
Fait un copier / coller de ce que tu vois à l'écran puisque je ne comprends pas où est ton problème