while imbriqués et $_

Le
Rakotomandimby (R12y) Mihamina
Bonjour,

Je cherche de la documentation sur une façon de faire quelquechose comme
ceci (code pour le principe):

open(F, "<", "test.txt");
while (<F>)
{
print $_ ;
while (split(/ /, $_))
{
print $_ ;
}
}

Avec ça, je "boucle" sur la premiere ligne du fichier ouvert.
J'esperais boucler sur tous les mots de chaque ligne. Ceci parceque dans
les faits je dois encore faire un traitement sur chaque mot (genre
remplacer les traits d'union par des espaces et autres).

Auriez-vous des indications sur les mots-clés que je dois utiliser pour
avoir plus de renseignements sur ce sujet? "perl nested while $_" ne m'a
pas donné de renseignement satisfaisants

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #17962951
À (at) Wed, 26 Nov 2008 08:05:13 +0300,
"Rakotomandimby (R12y) Mihamina"
Bonjour,

Je cherche de la documentation sur une façon de faire quelquechose
comme ceci (code pour le principe):

open(F, "<", "test.txt");
while (<F>)
{
print $_ ;
while (split(/ /, $_))
{
print $_ ;
}
}

Avec ça, je "boucle" sur la premiere ligne du fichier ouvert.



Normal... L'appel à 'split' n'alimente pas la variable $_ ! Et, dès
qu'on est sur une ligne non-vide, le second 'while' se transforme en
une boucle infinie !

J'esperais boucler sur tous les mots de chaque ligne. Ceci parceque
dans les faits je dois encore faire un traitement sur chaque mot
(genre remplacer les traits d'union par des espaces et autres...).

Auriez-vous des indications sur les mots-clés que je dois utiliser
pour avoir plus de renseignements sur ce sujet? "perl nested while $_"
ne m'a pas donné de renseignement satisfaisants...



En l'occurrence, une solution ne passe pas deux 'while' imbriqués mais
plutôt par un 'foreach' dans un 'while'. Ce qui donne en code pour le
principe :

open(F, "<", "test.txt");
while (<F>) {
print $_ ;
foreach (split(/ /, $_)) {
print $_ ;
}
}

Mais les espaces inter-mots ne sont pas remis en place...

Il faut donc faire autrement :

open(F, "<", "test.txt");
while (<F>) {
my @mots = split / /, $_;
foreach (@mots) {
# exemple de traitement sur $_
$_ =~ s/-/ /g;
}
print join(' ', @mots);
}

Ensuite, selon la nature du traitement à appliquer, il n'est pas
certain que le découpage en mot soit absolument nécessaire...

--
Paul Gaborit - Perl en français -
Patrice Karatchentzeff
Le #17963311
"Rakotomandimby (R12y) Mihamina"
[...]

Je cherche de la documentation sur une façon de faire quelquechose
comme ceci (code pour le principe):

open(F, "<", "test.txt");
while (<F>)
{
print $_ ;
while (split(/ /, $_))
{
print $_ ;
}
}



Marchera pas a priori : il faut renvoyer le split dans tableau et le
parcourir :

@tab = split() ;
for my $incr (@tab) {
traitement
}

PK
--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       
Rakotomandimby (R12y) Mihamina
Le #17963951
Paul Gaborit wrote:
open(F, "<", "test.txt");
while (<F>)
{
print $_ ;
while (split(/ /, $_))
{
print $_ ;
}
}
Avec ça, je "boucle" sur la premiere ligne du fichier ouvert.


Normal... L'appel à 'split' n'alimente pas la variable $_ !



Comment reconnait-on que telle ou telle instruction alimentera $_ ou
pas? J'avais en tete que tout ce qui retournait quelquechose le faisait.
Patrice Karatchentzeff
Le #17964731
"Rakotomandimby (R12y) Mihamina"
Comment reconnait-on que telle ou telle instruction alimentera $_ ou
pas? J'avais en tete que tout ce qui retournait quelquechose le
faisait.



perldoc -f split

D'une façon générale, c'est bien expliqué dans chaque fonction.

Il ne manque que des exemples dans la doc de Perl :)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       
Paul Gaborit
Le #17965561
À (at) Wed, 26 Nov 2008 13:12:43 +0300,
"Rakotomandimby (R12y) Mihamina"
Comment reconnait-on que telle ou telle instruction alimentera $_ ou
pas? J'avais en tete que tout ce qui retournait quelquechose le
faisait.



Il n'y a aucun moyen de savoir a priori si telle ou telle fonction
utilisera ou non $_. Pour le savoir, il faut lire la documentation.

Pour les fonctions intégrées telle que 'split' :

perldoc -f split
ou
perldoc perlfunc


--
Paul Gaborit - Perl en français -
Publicité
Poster une réponse
Anonyme