probleme valeurs recupérées

HD
Invité n'ayant pas de compte PHPfrance

16 juil. 2005, 20:16

salut
grace au script :
$fp = fopen("http://www.fininfo.fr/finfeed/wafabourse/valeur.hts?&id=MA0000010043%2CXX%2C102","r"); //lecture du fichier
if (!isset($page)) $page="";
while (!feof($fp)) { //on parcourt toutes les lignes
  $page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("Dernier cours :(.*)&nbsp;&nbsp;&nbsp;MAD</TD>",$page,$regs); //on isole le titre
echo $regs[1];
je recupere la valeur 610.00
toutefois cette valeur n'est pas consideree comme numerique par php car qund je veux verifier ca :
$next=$titre*2;
echo "\n $next";
fclose($fp);
j'ai comme reponse 144 au lieu de 1220
comme tranformer donc la valeur recuperee en une veritable valeur numerique (avec le . comme , ) afin de faire certains calculs
merci

Mammouth du PHP | 19672 Messages

16 juil. 2005, 23:01

Il faut procéder à un transtypage. Ce que tu récupères est en effet traité comme une chapine de caractère (String) qu'il faut convertir en double
Un petit tour dans la Doc t'en apprendra davantage
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 983 Messages

16 juil. 2005, 23:38

une chapine de caractère (String)
Chapine? kesako?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

16 juil. 2005, 23:49

une chapine de caractère (String)
Chapine? kesako?
c'est la moitié d'une pinte de caractères

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2005, 00:34

en fait il y avait erreur, au lieu de
$next=$titre*2; 
echo "\n $next"; 
fclose($fp); 
il fallait mettre
$next=$regs[1]*2; 
echo "\n $next"; 
fclose($fp); 
le probleme c'est qu avec la fonction :
$titre_num = (double) $regs[1]; // conversion de string à double
la valeur de $titre_num devient... 0 !!! une solution?

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2005, 01:25

VOICI LE NOUVEAU SCRIPT (oubliez ce qu'il y a avant)
<?
$fp = fopen("http://www.fininfo.fr/finfeed/wafabourse/valeur.hts?&id=MA0000010043%2CXX%2C102","r"); //lecture du fichier
if (!isset($page)) $page="";  // creer $page si elle n'existe pas
while (!feof($fp)) { //on parcourt toutes les lignes
  $page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("Dernier cours :(.*)&nbsp;&nbsp;&nbsp;MAD</TD>",$page,$regs); //on isole la valeur
       echo "$regs[1]";
$nettoyee=substr($regs[1], 7); // effacer tous les caracteres avant la valeur
       echo "<br>$nettoyee";
$valeur = (double) $nettoyee; // conversion de la valeur en double
       echo "<br> $valeur";
$calcul=$regs[1]*2;           // calcul pour verifier que c'est double
       echo "<br> $calcul";
fclose($fp);
?>
le probleme est desormais au niveau de
$valeur = (double) $nettoyee; // conversion de la valeur en double
       echo "<br> $valeur";
(tout se passe bien avant)
probleme car elle retourne 0 :
610.00
610.00
0
0
solution ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 juil. 2005, 01:35

c'est normal que tu fasses ton calcul sur $reg[1] et non sur $valeur que tu viens de transtyper ?
$calcul=$regs[1]*2;           // calcul pour verifier que c'est double
echo "<br> $calcul";
j'ai essayé ton script, je ne récupère pas les deux premières valeurs

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2005, 02:06

tu as raison et j'ai corrigé ca.
nouveau script (encore plus poussé) :
<?
$fp = fopen("http://www.fininfo.fr/finfeed/wafabourse/valeur.hts?&id=MA0000010043%2CXX%2C102","r"); //lecture du fichier
if (!isset($page)) $page="";        // creer $page si elle n'existe pas
while (!feof($fp)) { //on parcourt toutes les lignes
  $page .= fgets($fp, 4096);        // lecture du contenu de la ligne
}
$titre = eregi("Dernier cours :(.*)&nbsp;&nbsp;&nbsp;MAD</TD>",$page,$regs); //on isole la valeur
       echo "$regs[1] <br>";
$nettoyee=substr($regs[1], 25);     // effacer tous les caracteres avant la valeur
       echo "$nettoyee <br>";
$new_nettoyee = str_replace("." , "," , $nettoyee);  // conversion du . en ,
       echo "$new_nettoyee <br>";
$valeur = (double) $new_nettoyee;   // conversion de la valeur en double
       echo "$valeur <br>";
       echo(strlen($valeur));
$calcul=$valeur*2;                  // calcul pour verifier que c'est double
       echo "$calcul";
fclose($fp);
?>
resultat :
610.00
610.00
610,00
610
31220
les 2 premieres lignes : OK
la 3eme ligne : j'ai perdu les valeurs apres la virgule lors de la conversion
la 4eme ligne : meme si on neglige ce qu'il y a apres la virgule, le resultat de la multiplication est faux
...

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2005, 02:09

en fait non pour 31220 c'est bon :
3 c'est strlen($valeur)
et 1220 c'est le resultat de la multiplication
reste le probleme des chiffres apres la virgule

Mammouth du PHP | 19672 Messages

17 juil. 2005, 08:32

Normal: tu remplaces le point par une virgule, or la séparation des décimales doit être fait avec un point (notation anglaise) sinon ce sera considéré comme un entier et ce qui est après la virgule sera ignoré. Ne fais le remplacement que pour l'affichage et après les calculs seulement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2005, 18:47

mais c'est que t as raison ! comme quoi faut pas se compliquer la vie :lol:
merci a tous pour l aide et a la prochaine
pour les modos : probleme resolu (enfin !)