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 :

fgets et integer


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut fgets et integer
    Bonjour,

    Je vais vous poser une question de la mort qui tue, de quoi passer pour la pire noob qui soit! M'enfin, un peu comme à chaque fois que je poste ici!

    Alors voilà mon problème, J'ouvre un flux SGML et je récupère en fait seulement le contenu de la première ligne du flux. Pour ce faire, voici le bout de code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $v_flux = fopen($v_chemin, 'r');
      if ($v_flux != FALSE){
        $v_nb_docs = fgets($v_flux);
      }
    Comme vous l'avez surement compris au nom de ma variable, l'information que je récupère est censé être un int, or il s'agit d'un string, type de la fonction fgets.

    Mais voilà, cette information que je récupère est censé être utilisée plus tard dans un calcul. Et le résultat de ce calcul est toujours 0. A cause du typage.
    J'ai essayé de réglé le problème avec la focntion intvar() comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $v_flux = fopen($v_chemin, 'r');
      if ($v_flux != FALSE){
        $v_nb_docs = intvar(fgets($v_flux));
      }
    Mais ça n'a pas réglé le problème. En effet, la chaine récupérée est bien souvent (ce n'est pas une généralité) au format "01234". Elle commence par un zéro... et il me semble que ça bloque pour la fonction intvar.

    Bref, si vous avez une alternative à me proposer... Merci!

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Heu... tu veux sans doute parler de intval ?


    Les boutons et existent, servez-vous en

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Ouip! Désolé, j'ai écrit ça de tête! Mais c'est bien ça!

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Ca te donne quoi si tu fait un var_dump($v_nb_docs); ?


    Les boutons et existent, servez-vous en

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    J'ai essayé ça comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $v_flux = fopen($v_chemin, 'r');
      if ($v_flux != FALSE){
        $v_ligne = fgets($v_flux);
        $v_nb_docs = ltrim($v_ligne, '0');
        echo "flux : $v_fichier<br/>nombre : $v_nb_docs<br/>";
        var_dump($v_nb_docs); 
      }
    Et ça me donne ça:
    flux : fichier_type1_00001
    nombre : 01234
    string(14) "01234 "
    Je n'explique pas trop le string 14 car en fait, la première ligne du flux que je récupère avec le fgets est
    <NBDOCS>01234
    Comme tu peux voir, le ltrim ne donne rien (j'avais pourtant de l'espoir!) puisqu'il ne supprime pas le caractère '0'. Ou alors, je l'uilise très mal!

    EDIT : le 14 provient du fait qu'il y a un espace après la série de chiffres

  6. #6
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Et le intval($v_nb_docs) te donne quoi ?

    J'ai testé ca en local :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $test = "01234         ";
    var_dump($test);
    var_dump(intval($test));
    Et j'obtient ca :

    string '01234 ' (length=14)

    int 1234


    Les boutons et existent, servez-vous en

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Arg, pour ma part j'obtient ceci
    flux : fichier_type1_00001
    nombre : 01234
    string(14) "01234 " int : 0
    Ca explique bien des choses... mais je ne comprends pas vraiment.
    Voici mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $v_flux = fopen($v_chemin, 'r');
    if ($v_flux != FALSE){
      $v_ligne = fgets($v_flux);
      $v_nb_docs = ltrim($v_ligne, '\0');
      echo "flux : $v_fichier<br/>nombre : $v_nb_docs<br/>";
      var_dump($v_nb_docs);
      $nb_docs = intval($v_nb_docs);
      echo "int : $nb_docs <br/>";
    }
    Je suppose que le problème vient de la fonction fgets. Il n'y a que ça qui change entre ta version et la mienne... non?

  8. #8
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Bizard, tu est sur que le string (14) ne contient que des espaces en dehors des nombres ?

    Sinon une solution un peu crade serait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nb_docs = intval(preg_replace('/[^0-9]/', '', $v_nb_docs));
    Mais bon la c'est du bricolage


    Les boutons et existent, servez-vous en

  9. #9
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Non, le string(14) contient
    <NBDOCS>01234_
    Le _ c'est pour représenter l'espace. Et ça fait bien 14 caractères.

    Je essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $v_flux = fopen($v_chemin, 'r');
    if ($v_flux != FALSE){
       $v_ligne = fgets($v_flux);
       $v_nb_docs = substr($v_ligne, 0, 8); //Pour retirer <NBDOCS>
       echo "flux : $v_fichier<br/>nombre : $v_nb_docs<br/>";
       var_dump($v_nb_docs);
    }
    Et voici ce que j'ai obtenu:
    flux : fichier_type1_00001
    nombre :
    Puis j'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $v_flux = fopen($v_chemin, 'r');
    if ($v_flux != FALSE){
      $v_nb_docs = fgets($v_flux);
      echo "flux : $v_fichier<br/>nombre : $v_nb_docs<br/>";
      var_dump($v_nb_docs);
      $nb_docs = intval(preg_replace('/[^0-9]/', '', $v_nb_docs));
      echo "int : $nb_docs <br/>";
    }
    Et j'ai obtenu celà:
    flux : fichier_type1_00001
    nombre : 01234
    string(14) "01234 " int : 1234
    MERCI! Ta solution était la bonne!

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

Discussions similaires

  1. [CONVERSION] Integer to Word ?
    Par ulysse66x dans le forum Langage
    Réponses: 5
    Dernier message: 14/06/2003, 20h38
  2. [debutant] Comment afficher un integer a l'ecran
    Par Johngame dans le forum DirectX
    Réponses: 1
    Dernier message: 05/06/2003, 20h35
  3. taille des integer sous Interbase 6.0
    Par kinda dans le forum InterBase
    Réponses: 4
    Dernier message: 04/04/2003, 11h34
  4. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26
  5. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54

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