Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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