Perl :: probleme d'array et de length [resolu] - Perl - Programmation
Marsh Posté le 30-07-2004 à 12:35:29
chacal_one333 a écrit :
|
utilise chomp
edit:
Marsh Posté le 30-07-2004 à 12:38:47
hmmm, j'ai bien mis le chomp, mais il me sort 1 au lieu de la string
C:\Perl\bin>perl c:/work/p3rl/helloworld.pl |
Marsh Posté le 30-07-2004 à 12:39:24
utilises chomp()
edit : han zut .. grilled
Marsh Posté le 30-07-2004 à 12:42:11
oui c'est bon j'ai fais autre chose alors que la enetre d'edit etait ouverte, en plus apparement y a pas que ca comem erreur...
Marsh Posté le 30-07-2004 à 12:43:11
uriel a écrit : oui c'est bon j'ai fais autre chose alors que la enetre d'edit etait ouverte, en plus apparement y a pas que ca comem erreur... |
je plaisantais uriel
Marsh Posté le 30-07-2004 à 12:43:18
je connaissait pas chomp, j'aurai mis un length-1
mais bon, l'erreur est pas de la
Marsh Posté le 30-07-2004 à 12:46:31
Faut pas faire
push (@lines, chmop($line)); .. il aime pô ..
faut faire
Code :
|
Marsh Posté le 30-07-2004 à 12:50:01
Citation : C:\Perl\bin>perl cwork/p3rl/helloworld.pl |
superbe merci
language à rallonge ca
Marsh Posté le 30-07-2004 à 12:51:42
Heuu ouais en plus, tu te rends compte que tu fais une espèce de récursivité inutile ? ...
A la rigueur, essaye avec un while ...
Code :
|
Marsh Posté le 30-07-2004 à 14:13:36
ah vi c'est vrai, j'ai plus l'habitude des chaines mutables...
Marsh Posté le 30-07-2004 à 14:14:46
Code :
|
Marsh Posté le 30-07-2004 à 14:27:52
ha merde j'avais pas vu le coup de la longueur de la chaine!
Code :
|
et si tu ne veux pas que le "quit" compte dans tes lignes:
Code :
|
Marsh Posté le 30-07-2004 à 14:36:35
quit n'est pas dans mes ligne
en tout cas ton code
pas encore assez avancé
Marsh Posté le 30-07-2004 à 14:43:22
ReplyMarsh Posté le 30-07-2004 à 14:55:32
en gros l'explication:
<> (ou <STDIN<, ici ca revient au meme) ne renvoi pas la meme chose suivant qu'il est executé dans un contexte scalaire ($a=<> ou if(<> ) ou scalar(<> ) ou...) ou dans un contexte de liste (print <> ou @a=<> ou ....).
Dans un contexte de liste il renvoi toutes les lignes, alros que dans un contexte scalair il ne renvoi que la ligne suivante.
la variable $/ est une variable speciale qui indique à Perl quel est el separateur de ligne. normalement il est egal à "\n". Ici on lui dit que le separateur de ligne est "quit\n".
donc au lieu de n'avoir que la permiere ligne (separateur="\n" ) si on fait $a=<>, la on aura toutes les lignes jusqu'au separateur qui est "quit\n".
on recupere ca et on le split (spli est en contexte scalair donc c'est bon), selon les "\n":
split("\n", <> );
on obtient donc en sortie un tableau de lignes que l'on peu renverser avec reverse ou modifier avec un map (pour ajouter la longueur de la ligne).
ensuite il suffit de recoller tout ca avec un join, en remettant les "\n"
Marsh Posté le 30-07-2004 à 15:07:24
ps : merci pour l'explication
je reviendrait quand je serait un peu plus avancé, c'est que ma 2eme journée
Marsh Posté le 30-07-2004 à 12:28:19
je debute en perl, et j'ai fait un petit exercice issu d'un site.
Le but et de faire un prompt tant que l'input "quit" n'est pas tapé.
Une fois quit tapé, on doit reafficher tout les messages dans l'order inverse, tout en affichant le nombre de character de la phrase.
j'ai pondu cette sous routine
sub checkDot {
if ($line ne "quit\n" ) {
push (@lines, $line);
$line = <STDIN>;
&checkDot;
}
else {
@lines = reverse(@lines);
foreach $linz (@lines) {
print $linz." <= ".length($linz)." character";
}
}
}
$line = <STDIN>;
&checkDot;
esuite je fait
C:\Perl\bin>perl c:/work/p3rl/helloworld.pl
salut
les
gens
d'hfr
quit
donc la le programme se stop, et il doit me le mettre en sens inverse
mais voila ce qu'il me sort
d'hfr
<= 6 charactergens
<= 5 characterles
<= 4 charactersalut
<= 6 character
en gros, il me sort tout les mot mais en décalé et avec le \n (ce qui n'est pas le probleme
help
Message édité par Profil supprimé le 30-07-2004 à 13:05:08