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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Wed, 26 Nov 2008 08:05:13 +0300, "Rakotomandimby (R12y) Mihamina" écrivait (wrote):
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 :
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 - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 26 Nov 2008 08:05:13 +0300,
"Rakotomandimby (R12y) Mihamina" <mihamina@infogerance.us> écrivait (wrote):
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 :
À (at) Wed, 26 Nov 2008 08:05:13 +0300, "Rakotomandimby (R12y) Mihamina" écrivait (wrote):
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 $_ ; 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.
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.
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
"Rakotomandimby (R12y) Mihamina" a écrit :
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 :)