Page 1 sur 1

probleme valeurs recupérées

Posté : 16 juil. 2005, 20:16
par HD
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

Posté : 16 juil. 2005, 23:01
par Cyrano
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

Posté : 16 juil. 2005, 23:38
par rami
une chapine de caractère (String)
Chapine? kesako?

Posté : 16 juil. 2005, 23:49
par ouckileou
une chapine de caractère (String)
Chapine? kesako?
c'est la moitié d'une pinte de caractères

Posté : 17 juil. 2005, 00:34
par Invité
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?

Posté : 17 juil. 2005, 01:25
par Invité
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 ?

Posté : 17 juil. 2005, 01:35
par ouckileou
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

Posté : 17 juil. 2005, 02:06
par Invité
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
...

Posté : 17 juil. 2005, 02:09
par Invité
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

Posté : 17 juil. 2005, 08:32
par Cyrano
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.

Posté : 17 juil. 2005, 18:47
par Invité
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 !)