Pages : 1
#1 Le 17/07/2012, à 15:50
- Helianza
IF qui ne s'exécute pas.
Bonjour,
Je dois faire un code qui lit un fichier ligne par ligne, récupère le premier chiffre comme le nombre d'éléments à analyser, et parmi ces éléments, me dit quel est celui qui est en double.
Voici mon code :
<?php
/*Ouverture du fichier en lecture seule*/
$fichier = fopen('exercice2.txt', 'r');
/*Si on a réussi à ouvrir le fichier*/
if ($fichier)
{
//Tant que l'on est pas à la fin du fichier
while (!feof($fichier))
{
//On lit la ligne courante
$ligne = fgets($fichier);
//On découpe ligne par ligne, selon les délimiteurs ; et ,
$decoupe=preg_split("/[;,]/", $ligne);
//On isole le premier terme comme étant le nombre d'arguments à analyser
$nbrt = $decoupe[0];
//On initialise $reponse à 0
$reponse=0;
//Je fais ensuite deux boucles for :
//- la première balaye tous les arguments, un par un
//- la seconde compare chaque argument de la première boucle for avec tous ceux qui suivent
for ($i=1; $i<=$nbrt; $i++)
{
for ($j=$i+1; $j<=$nbrt; $j++)
{
//Si on trouve deux résultats égaux, on écrit la valeur de la variable dans $reponse
echo "Juste avant le if, \$decoupe[\$i] = ".$decoupe[$i]."<br>";
echo "Juste avant le if, \$decoupe[\$j] = ".$decoupe[$j]."<br>";
if ($decoupe[$i]==$decoupe[$j])
{
echo "JE SUIS DANS LE IF<br>";
$reponse=$decoupe[$i];
}
echo "Réponse provisoire : ".$reponse."<br>";
}
}
//On écrit la réponse
echo "Réponse finale : ".$reponse."<br><br>";
}
//On ferme le fichier
fclose($fichier);
}
?>
Voici le fichier de test :
5;3,4,1,4,2
4;4,1,1,2
3;1,1,3
3;1,3,3
8;2,2,3,4,5,6,7,8
Et voici le résultat obtenu :
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 1
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 1
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 4
JE SUIS DANS LE IF
Réponse provisoire : 4
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 4
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 4
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 4
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 4
Réponse finale : 4
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 1
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 1
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 1
JE SUIS DANS LE IF
Réponse provisoire : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 2
Réponse provisoire : 1
Réponse finale : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 1
JE SUIS DANS LE IF
Réponse provisoire : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 1
Réponse finale : 1
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 1
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 0
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 0
Réponse finale : 0
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 2
JE SUIS DANS LE IF
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 5
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 6
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 3
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 5
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 6
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 2
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 4
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 5
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 6
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 3
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 5
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 6
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 4
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 5
Juste avant le if, $decoupe[$j] = 6
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 5
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 5
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 6
Juste avant le if, $decoupe[$j] = 7
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 6
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Juste avant le if, $decoupe[$i] = 7
Juste avant le if, $decoupe[$j] = 8
Réponse provisoire : 2
Réponse finale : 2
Le problème, c'est que lorsque l'un des deux éléments à tester est le dernier de la liste, le IF n'est pas pris en compte. On voit clairement, dans le résultat, que pour la ligne "3;1,3,3", $decoupe[$i] = $decoupe[$j]. C'est même le programme qui me le dit. Pourtant, le IF ne s'exécute pas.
Quelqu'un saurait me dire pourquoi ?
D'avance, merci.
Hlz
Hors ligne
#2 Le 17/07/2012, à 17:24
- Helianza
Re : IF qui ne s'exécute pas.
La découpe selon le preg_split laissait le caractère de fin de ligne. Et donc, les deux variables n'avaient pas la même valeur.
Il fallait mettre :
$decoupe=preg_split("/[\n\r\t,;]+/", $ligne);
Hors ligne
Pages : 1