Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Script Perl

bansan, le mardi 25 mars 2008 à 08:46:09
Bonjour,
Voici une demande de script dont je ne vois pas pourquoi elle ne marche pas quand je l'ecris en ligne de code


Nombre d'occurrences
Ecrire un script Perl dont le role de compter et d'afficher le nombre d'occurrences d'un caractere dans une chaine. Le caractere ainsi que la chaine sont saisis par I'utilisateur.

Exemple d'exécution (en gras, ce qui est saisi par rutilisateur) :
Saisir une chaine : une graine de baobab
Saisir un caractere : a
Le caractere a apparait 3 fois dans la chaine.

Voila mes commandes:

#!/usr/local/bin/perl
#nombre d'occurences d'une chaine
print "Saisir une chaine:";
$f=<STDIN>;
print "Saisir un caractere:";
$g=<STDIN>;
$l=length($f);
$p=0 ;
for ($i=0;$i<$l;$i++) {
$e=substr($f,$i,1);
if ($g==$e) {
$p=$p+1;
}
}
print "Le caractere $g apparait $p fois "
Ou y a t'il une erreur.?
MErci de me repondre
Configuration: Windows XP
Firefox 2.0.0.12
Répondre à bansan  Signaler ce message aux modérateurs Aller au dernier message

1


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
b0rice, le mardi 25 mars 2008 à 09:19:07
Hello,

Plusieurs choses:

1. En général, le path de perl est /usr/bin/perl mais, peut-être que chez toi c'est bien /usr/local/bin/perl.
2. Quand tu fais un truc du genre $g = <STDIN>, le caractère de fin de ligne ("\n" en général sous linux/unix) fait partie de la saisie. La commande pour le virer simplement est chomp $g
3. En perl, l'opérateur de comparaison == teste l'égalité numérique. Ce que tu veux c'est l'opérateur eq qui teste l'égalité entre des chaînes.

#!/usr/bin/perl
#nombre d'occurences d'une chaine
print "Saisir une chaine: ";
$f=<STDIN>;
print "Saisir un caractere: ";
$g=<STDIN>;
chomp $g;
$l=length($f);
$p=0 ;
for ($i=0;$i<$l;$i++) {
$e=substr($f,$i,1);
if ($g eq $e) {
$p=$p+1;
}
}
print "Le caractere $g apparait $p fois\n" ;

Voilà, ça fonctionne.
Répondre à b0rice

2


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
bansan, le mardi 25 mars 2008 à 09:36:43
Bonjour
Ahlalala, j'avais donc presque tout bon...si j'en crois ton script, j'avais une erreur dans l'egalité qui n'espas == mais eq...et la ofonction chomp pour supprimer le dernier caractere sans quoi ca prenait le dernier caractere en compte dans le comptage
...Je vois je vois..
J'ai cherche jusqu'a minuit hier soir ou ca ne collait pas...
Merci beaucoup.

Je suis en train de plancher sur celui ci maintenant pendant que j'attendais une solution pour la premiere
Je suppose que c'est la meme erreurs ou les memes erreurs que j'etais en train de faire pour celle la:

Nombre de voyelles
Ecrire un script Perl dont le role est de compter et d'afficher le nombre de voyelles (accentuees ou
non) presentes dans une chaine de caracteres saisie par I'utilisateur.

Voici ce que j'etais en train de faire

#!/usr/local/bin/perl
#nombre de voyelles
print"Saisir une phrase:";
$p=<STDIN>;
@voyelle=("a","e","i","o","u","é","à","è") ;
$l=length($p);
$t=0;
for ($u=0;$u<=$#voyele;$u++){

for ($i=0;$i<$l-1;$i++) {
$d=substr($p,$i,1);
if ($voyelle[$u]==$d){
$t=$t+1 ;

}
}
print "$t"
Répondre à bansan

3


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
 b0rice, le mardi 25 mars 2008 à 09:55:43
Re.

Pour le dernier caractère viré par chomp, le problème n'était pas dans le comptage mais dans le test d'égalité. En fait sans le chomp, ça revenait à tester chaque caractère eq "a\n" ce qui, évidemment, n'était jamais vrai.

Pour ton 2ème problème, le mieux ce serait de passer par des expressions régulières pour les voyelles.

En fait les re sont extrêmement utilisées en Perl (c'est une de ses grandes forces).

Elles auraient déjà pu être utilisées dans ton 1er problème.

par exemple si tu écris un truc du style:

my $chaine = "elle est où ma voyelle\n";
my @voyelles = $chaine =~m/^[aeiouàéèù]$/g;
print "longueur de la chaine: ".(length($chaîne)-1)."\n";
print "nb de voyelles: @voyelles\n";

Ca devrait le faire...

Explications:

[] dans une re est une liste de cas possibles. L'égalité est testée avec chaque membre. par ex [a-zA-Z] sera vrai pour toute lettre de l'alphabet occidental.
le commutateur /g permet de rechercher chaque occurence
^ est le début d'une chaîne (ce n'est pas un caractère à proprement parler)
$ est la terminaison d'une ligne (ici \n)
$chaine =~ m/$re/ permet de tester une re sur $chaine

Voilà. Désolé, pas le temps de tester le code, j'ai un avion à prendre ;)

Bon courage et bonne journée.

P.S.: Ton " dans la liste de voyelles est seulement valable si tu parses du code html.
Répondre à b0rice

Résultats pour script Perl

Aide pour un script perl (Résolu) Bonjour, Si quelqu'un pouvait me dire ou est ce que cela cloche dans mes lignes.... Ecrire un script Perl dont le rôle est de permettre à l'utilisateur de saisir une chaîne de caractères et d'indiquer si cette chaîne représente une... www.commentcamarche.net/forum/affich-5758937-aide-pour-un-script-perl
Script perl (Résolu) Bonjour, Probleme d'execution script perl voici le script perl ../trt_auto.pl imp_pre_lig_instr.cmd PRET.txt --maxtime=120 >> journal.log Message d'erreur: perl n'est pas reconnu comme commande interne ou externe... Comment faire ?... www.commentcamarche.net/forum/affich-1692577-script-perl
[PERL] Telecharger config cisco (Résolu) Bonjour ! Je cherche en ce moment à telecharger les fichiers de configuration d'un routeur cisco par le biais d'un script perl et d'un serveur tftp. Le pc et le routeur sont reliés en Ethernet. Voici mon script actuellement (je découvre... www.commentcamarche.net/forum/affich-2783903-perl-telecharger-config-cisco

Résultats pour script Perl

[IE] Erreur de script / Effectuer un débogageDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un... www.commentcamarche.net/faq/sujet-1271-ie-erreur-de-script-effectuer-un-debogage
Exécuter un script shellExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,... www.commentcamarche.net/faq/sujet-4627-executer-un-script-shell
Créer un script d'ouverture de sessionWindows permet de définir des scripts d'ouverture de session, c'est-à-dire des scripts contenant des commandes exécutés dès qu'un utilisateur ouvre une nouvelle session. Les scripts d'ouverture de session permettant de lancer des tâches qui seront... www.commentcamarche.net/faq/sujet-5436-creer-un-script-d-ouverture-de-session

Résultats pour script Perl

Perl et commandes Linux (Résolu)Bonjour, J'essaie d'ecrire un script Perl tres simple qui consiste : 1) a changer de repertoire; 2) a assigner a une variable le contenu du repertoire en question; 3) a afficher le contenu de la variable. Mais j'ai de la difficulte avec... www.commentcamarche.net/forum/affich-4326156-perl-et-commandes-linux
[PERL]: HELP script traitement txt tabulaire (Résolu)Bonjour à tous, J'espère que je poste au bon endroit... Je ne connais pas encore toute les possibilités offertes par Perl, et j'aurais besoin d'aide svp concernant un problème de traitement de fichier texte via un script Perl (et... www.commentcamarche.net/forum/affich-3430031-perl-help-script-traitement-txt-tabulaire
Perl 2 exe (Résolu)salut commenr faire pour rendre un script perl exécutable(script.exe) merci d'avance. www.commentcamarche.net/forum/affich-2699491-perl-2-exe

Résultats pour script Perl

Télécharger All In One Video ScriptAll In One Video Script est un script pour l'extension GreaseMonkey pour le navigateur Firefox permettant de détecter la présence d'une vidéo dans la page et de récupérer son URL. www.commentcamarche.net/telecharger/telecharger-3673503-all-in-one-video-script

Résultats pour script Perl

Le jeu vidéo de la semaine : Pokémons version Diamant et Perle(Paris - Relaxnews) - Les Pokémons sont de retour sur la Nintendo DS dès vendredi 27 juillet avec la sortie de nouvelles versions, Diamant et Perle.Dans la peau de Louka ou d'Aurore, le joueur devra trouver un maximum de Pokémon afin de combattre la... www.commentcamarche.net/actualites/le-jeu-video-de-la-semaine-pokemons-version-diamant-et-perle-3292885-actualite.php3

Résultats pour script Perl

Perl - Les fichiersLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles... www.commentcamarche.net/contents/perl/perlfich.php3
Objets WSH (Windows Scripting Host)WSH Windows Scripting Host (WSH) est un hôte de scripts pour les systèmes Microsoft Windows permettant d'interprêter des scripts afin d'automatiser l'administration du système. WSH permet d'interprêter nativement les scripts écrits en JScript ou... www.commentcamarche.net/contents/vbscript/vbs-wsh.php3
Perl - Caractéristiques du langageFichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa... www.commentcamarche.net/contents/perl/perlcarac.php3