Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/11/2012, 14h22   #1
nico38100
Invité de passage
 
Inscription : octobre 2012
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2012
Messages : 20
Points : 2
Points : 2
Par défaut Boucle for probleme

Bonjour

Debutant en Perl. Je voudrais savoir comment on peut recuperer la valeur a l'indice i d'un tableau qui est dans un for. Je ne sais meme pas si c'est clair ce que je raconte

Code :
1
2
3
4
5
6
7
8
9
10
 
 
for (my $i=1;@line2 != 0;$i+=2)
	{	
	if ($line2[$i] != "no_prj")
		{
			@line3=($line2[$i-1],@line3);
		}
 
	}
En gros je n'arrive pas a recuperer $line2[i] car il me dit que ma chaine est vide alors qu'il yest sense avoir quelque chose .

Merci d'avance

Cordialement
nico38100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 18h55   #2
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Laurent R.
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2012
Messages : 588
Points : 1 152
Points : 1 152
Dans ta boucle:

Code :
for (my $i=1;@line2 != 0;$i+=2)
la condition d'arrêt ";@line2 != 0;" est sans doute fausse: en gros, elle dit: continue tant que le nombre d'éléments du tableau @ligne2 est différent de 0. Comme tu ne modifies pas le tableau @line2, de deux choses l'une: soit le tableau est vide au début, et la boucle ne s'exécutera pas; soit il n'est pas vide, et la boucle continuera à boucler pour toujours.

J'imagine que tu veux peut-être plutôt quelque chose comme: "$line2[$i] != 0;". Mais même alors, le code est toujours erroné, car comme rien ne modifie $line2[$i], tu auras de nouveau soit aucune exécution de la boucle, soit une boucle infinie.

Peut-être pourrais-tu expliquer précisément ce que tu veux faire pour que l'on puisse t'aider plus efficacement.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2012, 08h54   #3
nico38100
Invité de passage
 
Inscription : octobre 2012
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2012
Messages : 20
Points : 2
Points : 2
Je voudrais en quelque sorte lire ma boucle sans préalable condition

Merci de ton aide en tout cas .
nico38100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2012, 09h15   #4
rand0m
Invité régulier
 
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 7
Points : 7
Pas mal d'erreurs j'ai l'impression :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
# Ça devrais plutôt être à mon avis : 
# for(my $i = 1; exists $line2[$i]; $i += 2)
 
for (my $i=1;@line2 != 0;$i+=2)
{	
       # Il faut utiliser l'opérateur 'ne' pour comparer 2 chaines :
       # if($line2[$i] ne "no_prj")
	if ($line2[$i] != "no_prj")
	{
                # ensuite ici, ça sera à mon avis plus joli et plus efficace de faire :
                # unshift @line3, $line2[$i-1];
		@line3=($line2[$i-1],@line3);
	}
 
}
rand0m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2012, 19h01   #5
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Laurent R.
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2012
Messages : 588
Points : 1 152
Points : 1 152
Citation:
Envoyé par nico38100 Voir le message
Je voudrais en quelque sorte lire ma boucle sans préalable condition .
Il ne s'agit pas d'une condition préalable, mais d'une condition d'arrêt, qui arrête la boucle quand elle devient fausse. Si tu n'en mets pas, tu auras une boucle sans fin. Mais évidemment, si elle est fausse dès le début, ta boucle ne s'exécutera même pas une fois.

Il va vraiment falloir que tu explique ce que tu veux faire et ce que contiennent tes variables avant d'entrer dans la boucle (ou du moins ce que tu penses qu'elles contiennent) pour l'on puisse d'aider. Là, je ne comprends pas ton code.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 13h18   #6
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 816
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 816
Points : 31 517
Points : 31 517
Le problème est résolu ?
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h46.


 
 
 
 
Partenaires

Hébergement Web