Lire un chiffre avec fgets($my_file)

Résolu/Fermé
ordiminnie Messages postés 219 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 5 juillet 2016 - Modifié par ordiminnie le 15/11/2012 à 16:17
ordiminnie Messages postés 219 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 5 juillet 2016 - 15 nov. 2012 à 17:40
Bonjour,

Je m'arrache les cheveux sur une bête conversion string > int.

Oui, j'ai essayé le fameux (int) et aussi intval() mais aucun des deux ne marche, et je pense que ça vient du fait que mon chiffre provient d'un fichier texte, lu avec fgets(), car quand j'essaye mon code avec un "vrai" string, il fonctionne.

voici le code, ce sera plus clair:

// 1/ on ouvre le fichier (il contient uniquement le texte suivant : 5) 
$my_file = fopen(dirname( __FILE__ ) . '/evenement/star.txt', 'r'); 

// 2 : lit le nombre d'étoiles 
$star_count = fgets($my_file);  

// 3: test 
echo $star_count; // affiche bien 5  

// 4: vérifie qu'il y a au moins une étoile 
 if ((int)$star_count > 0){ 
 echo 'au moins une étoile';  
} 


Mon problème: on ne rentre jamais dans le if!

J'ai essayé cette astuce:
if ((bool)$star_count == true){ 
   echo 'au moins une étoile';  
} 


Ca fonctionne mais je suis quand même bloquée après, car dans mon IF, je boucle sur le nombre d'étoile, et là c'est pas un cast vers un booléen qui va m'aider!!

Je précise que si je remplace :
$star_count = fgets($my_file); 

...par :
$star_count = "5"; 

...tout fonctionne bien!

Merci de votre aide!




Il faut avoir des rêves suffisamment grands pour ne pas les perdre de vue quand on les poursuit. Oscar Wilde
A voir également:

4 réponses

Utilisateur anonyme
15 nov. 2012 à 16:30
Bonjour

À mon avis, ton $star_count contient un caractère de fin de ligne (que tu ne vois pas) en plus du 5 (que tu vois)

Essaye :
$star_count = trim(fgets($my_file));
0
ordiminnie Messages postés 219 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 5 juillet 2016 17
15 nov. 2012 à 16:39
Merci le père pour ton idée...j'y ai cru, mais non...ça ne change rien. :(
0
Utilisateur anonyme
15 nov. 2012 à 16:55
Je suis sûr que le problème vient de ce que $star_count contient autre chose que ce que tu crois.
Peux-tu essayer :
$star_count = fgets($my_file);
for ($k=0;$k<strlen($star_count);$k++) echo ord($star_count[$k]),' ';
0
ordiminnie Messages postés 219 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 5 juillet 2016 17
15 nov. 2012 à 17:40
Et tu as bien raison!
En fait, mon fichier était en UTF-8, et un fameux "bom" trainaît en début de fichier. En le convertissant en utf-8 sans bom, tout rentre dans l'ordre.

Pour info, le strlen renvoyait 4... ;)

Un grand merci pour ton aide.
0