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 :

[Tableaux] Problème avec une chaine de caractères


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut [Tableaux] Problème avec une chaine de caractères
    Bonjour

    Je suis en train de travailler avec une chaine de caractères, et je rencontre un problème qui me laisse perplexe.

    Selon que cette chaine soit vide ou non, je dois effectuer un certain traitement. Or cette chaine n'apparait jamais comme vide, meme quand elle l'est.

    Elle est initialisé à partir d'un fichier formaté de la facon suivante :

    var1=valeur1
    var2=valeur2
    ...

    la resultat de la lecture est stocké dans un tableau de la facon suivante :
    $tab[var1] = valeur1
    $tab[var2] = valeur2
    ...

    or, dans mon fichier, sur une ligne j'ai une variable qui ne contient pas de valeur, il n'y a rien après le =.

    quand j'affiche $tab[var], cela n'affiche rien, ce qui est normal.

    mais quand je fais strlen($tab[var]), j'obtient 7.
    empty($tab[var]) retourne faux.

    et quand j'affiche caractère par caractere, j'ai des resultats différents selon la methode :

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $t = $tab[var];
    echo $t{0}.'<br>';
    echo $t{1}.'<br>';
    echo $t{2}.'<br>';
    echo $t{3}.'<br>';
    echo $t{4}.'<br>';
    j'obtiens
    $t{5} et $t{6} n'affichent rien, alors que strlen m'a pourtant retourné 7

    et que si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $t{0}.$t{1}.$t{2}.$t{3};
    rien ne s'affiche.

    je ne vois pas d'ou peut venir le problème.
    quelqu'un peut il m'aider ?

    merci

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Je crois que ta procédure pour lire le fichier ne prend pas en compte la possibilité d'un champ vide, et te retourne quelque chose de bizarre. On peut la voir ?

  3. #3
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut
    la voila, elle est toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $f = fopen("fichier","r");
    $tab = array();
    while($data = fgets($f,1024)){
      list($key,$val) = explode('=',$data);
      $tab[$key] = $val;
    }	
    fclose($f);

  4. #4
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    A mon avis c'est à ce niveau là qu'il faut chercher, teste ta valeur de $val quand elle est censée être vide.

  5. #5
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut
    En regardant le fichier texte,je me suis rendu compte que j'ai dis une connerie plus haut.
    Le fichier est généré par un logiciel et je pensais qu'il n'affectaient pas de valeur quand la variable était vide. En réalité, il lui affecte la valeur <N/A>.

    C'est bien ecrit <N/A> dans le fichier texte mais cette valeur n'est pas lue.
    A la place j'obtient une chaine vide comme décrit plus haut.
    Comme si le fgets remplacait le <N/A> par autre chose de bizarre.

  6. #6
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut
    Ca y est, je viens de comprendre le problème.
    C'est tout bête et ce n'est vraiment pas la première chose à laquelle j'aurais pensé.

    Comme c'est du web, c'est donc du HTML qui est affiché.
    Et <N/A> est donc interprétée comme une balise HTML a cause des <> donc la valeur existe mais ne peux pas etre affichée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2007, 14h10
  2. [débutant] Problême avec les chaines de caractères
    Par Micky_du_57 dans le forum C++
    Réponses: 2
    Dernier message: 03/06/2007, 19h03
  3. Réponses: 8
    Dernier message: 06/05/2007, 21h47
  4. Réponses: 4
    Dernier message: 01/02/2007, 19h06
  5. Réponses: 3
    Dernier message: 26/05/2006, 19h49

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