IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Lecture de fichier et test


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 24
    Points
    24
    Par défaut Lecture de fichier et test
    Bonjour à tous.

    Je vous soumet un petit souci de lecture de fichier :
    principalement au niveau du test d'une valeur, j'ai un résultat bizarre qui doit être lié à quelque chose que je ne connais pas où n'arrive pas à diagnostiquer :
    voici un petit bout de code qui lit un fichier texte avec trois champs tabulés : numero, nom et tarif_id, pas d'entête.
    Ce qui est bizarre, c'est le test if ($tarif_id == 'TELUN') qui ne fonctionne pas correctement. Il ne fonctionne QUE sur le dernier enregistrement.
    Si je met if ($tarif_id = 'TELUN') ça fonctionne sur les trois mais ce n'est pas la syntaxe de test "normale" de php.
    Si enfin, de dé-comment la ligne // $tarif_id = 'TELUN';, et remets if ($tarif_id == 'TELUN'), ça fonctionne.

    J'ai du mal à comprendre.

    Config XP pro+WampServer 2.0, php 5.3.0, apache2.2.11

    Auriez-vous une idée ou un conseil ?

    Amicalement

    pht

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     
    echo "<BR><BR>Lecture fichier ----------------------<BR><BR>";
     
    $n_path = 'upload/toto.ddf';
    // echo "n_path=".$n_path."<BR>";
    if ($fp = fopen($n_path, 'r'))
    {
     
    	$num_ligne=0;
    	while ($line = fgets($fp))
    	{
    		$num_ligne++;
     
    		@list($numero, $nom, $tarif_id) = explode("\t", $line);
    		echo "Ligne $num_ligne = ".$line."<BR>";
     
    		echo "Ligne $num_ligne 1= ".$tarif_id."<BR>";
     
    		//$tarif_id = 'TELUN';
    		if ($tarif_id == 'TELUN') {
    			echo "affectation<BR>";
    			$tarif_id = 'TELTROIS';
    		}
     
    		echo "Ligne $num_ligne 2= ".$tarif_id."<BR>";
     
    		echo "<BR>";
     
    	}
    	fclose($fp);
     
    }
    voici le fichier toto.ddf, je ne suis pas sur que les tabulations fonctionnent...
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0200000123	UNTEL	TELUN
    0200000198	DEUXTEL	TELUN
    0200000199	TROISTEL	TELUN

  2. #2
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Bonsoir,

    Ajoute cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tarif_id=trim($tarif_id);
    juste après la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @list($numero, $nom, $tarif_id) = explode("\t", $line);
    cela te permettra d'élaguer $tarif_id que tu récupères avec des caractères blancs.

    Fred

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Ca ne fait rien de plus.

    J'ai ajouté un quatrième champ : $autre_id et je reproduis les tests.
    Du coup, pour $tarif_id, ça fonctionne mais pas pour $autre_id.
    On dirait que c'est le dernier champ qui pose problème.
    J'ai donc ajouté un cinquième champ vide et c'est bon... mais ce n'est pas très académique.
    J'ai vu que list() lit les variables à partir de la droite.
    Est-ce ça qui pose problème ?

    Merci de ton aide nez en moins.

  4. #4
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Cela doit venir des sauts de lignes :
    Il reste un charactère en fin de ligne malgré le fgets !

    Pour l'eliminer, il faut effectivement utiliser trim :
    while ($line = trim(fgets($fp)))

    Z.

Discussions similaires

  1. Lecture fichier et test sur ligne suivante
    Par sousou_ dans le forum Langage
    Réponses: 4
    Dernier message: 23/12/2010, 11h55
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo