Page 1 sur 1

IF qui ne s'exécute pas

Posté : 17 juil. 2012, 15:51
par Helianza
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 :

Code : Tout sélectionner

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 :

Code : Tout sélectionner

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

Re: IF qui ne s'exécute pas

Posté : 17 juil. 2012, 18:24
par Helianza
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);

Re: IF qui ne s'exécute pas

Posté : 18 juil. 2012, 09:03
par sirakawa
AMHA, en faisant un
$t_ligne = explode (";",$ligne);
on récupère le premier élément de $ligne par:
$premier = $t_ligne[0];
puis on envoie:
$t_elements = explode (",", $t_ligne[1]);
et le tour est joué.
Rappellerai-je que la documentation officielle déconseille le recours aux expressions régulières quand on peut faire autrement.