Script Perl
Fermé
bansan
Messages postés
122
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
8 mai 2011
-
25 mars 2008 à 08:46
b0rice Messages postés 9 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 avril 2008 - 25 mars 2008 à 09:55
b0rice Messages postés 9 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 avril 2008 - 25 mars 2008 à 09:55
A voir également:
- Script Perl
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
- Denon perl pro test - Accueil - Audio
1 réponse
b0rice
Messages postés
9
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008
1
25 mars 2008 à 09:19
25 mars 2008 à 09:19
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.
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.
25 mars 2008 à 09:36
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"
25 mars 2008 à 09:55
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.