Aller au contenu

Sujets conseillés

Posté

Bonjour,

Je suis confronté à un problème actuellement.

J'ai ce genre de donné à utiliser

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

48133 44091 48141 46110 39401 39322 39330 46112 45151 94020 47152

45070 40402 92020 46100 37311 46111 48123 32085 30085 45101 93020

45153 38323 46072 31065 30067 43280 45062 29098 31086 37360 30068

32015 31058 30065 39321 40400 32231 40312 48122 44093 48132 91020

SFLOC 66611 680/0 90020 46101 42282 46091 31088 49103 39320 45073

Tout d'abord je commence par le premier chiffre de la première donnée,je regarde s'il est égal à 9,si non je continu si oui je prends le second chiffre ,ensuite je prends la second groupe de chiffre,tout d'abord je vérifie si le premier chiffre est pas égal à 9.

Ensuite s'il est pas égal à 9 je prend les 2 premiers chiffres,les 2 suivants et le dernier et je faits générer une image.Ensuite je continu pour le 3ème bloc de chiffre.

Le problème c'est que le faire avec des if et elseif serait vraiment plus que très long et il serait très simple de se perdre.

Serait il possible d'utiliser un while ou un for et comment faudrait il l'utiliser.

Merci pour vos réponses

A bientôt

Posté

Salouté,

J'ai pas tout compris.... remarque, il est encore tôt ^_^

1 - Y a t il toujours le même nombre de colonne de chiffre? ( Là j'en compte 11)

2 - D'où proviennent les chiffres? Requete, fichier texte etc.... ?

3 - Prends en exemple la première ligne afin que je comprenne et puisse t'aider au mieux :)

Portekoi

Posté (modifié)

Voilà le code que j'ai commencé avec if.

$egal= explode("=", $contenu);
$contenu = $egal[1];
$egal= explode("SFUK31", $contenu);
$contenu = $egal[0];
$contenuu= explode(" ", $contenu);
$result = count ($contenuu);
if ($result =='0')
{

}

else
{


//1
$contenu[1]  = substr("$contenuu[3]",0, 1);
if ($contenu[1] == '9')
{
$contenuo[1] = substr("$contenuu[1]",1, 2);

$contenu[2]  = substr("$contenuu[2]",0, 1);

if ($contenu[2] != '9')
{
$contenulat[2]  = substr("$contenuu[2]",0, 2);
$contenulong[2]  = substr("$contenuu[2]",2, 4);
$contenudir[2]  = substr("$contenuu[2]",4, 5);



}
}




}

J'ouvre d'abord un fichier txt contenant les données.

Ensuie j'enlève le = qu'il y a devant.

J'utilise count() pour savoir le nombre de données enregistrées,comme ce n'est pas toujours le même,il peut y avoir 200 données comme 3.

Ensuite j'isole chaque groupe de 5 chiffres.

Et après il faut que je fasse ma boucle.

Modifié par snwoman49
Posté

Ok et ensuite, si j'ai bien compris :

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

^ -> Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

--^- > Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

---^- > Il n'est pas égal à 9 donc je continu

OU

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

^ -> Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

--------^- > Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

----------------^- > Il est égal à 9

et ensuite?

Posté (modifié)

Donc c'est ca

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

^ -> Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

--------^- > Il n'est pas égal à 9 donc je continu

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

----------------^- > Il est égal à 9

Ensuite

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

-------------------^--je prend son chiffre comme celui d'avant est égal à 9

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

--------------------------^^-je prend ces 2 là

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

-----------------------------^^-je prend ces 2 là aussi

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

--------------------------------^-je prend celui là aussi

Après je faits générer une image avec imagecopy() et je recommence pour ce groupe de chiffres là

46080 46142 95020 46113 39323 39331 96020 46151 97020 46150 99020

-----------------------------------^^^^

Modifié par snwoman49
Posté

Désolé mais je préfère être sûr avant de faire quelque chose ^_^

Donc :

Sur le chiffre 95020, tu a écris que tu prenais le 95, le 02 et.... ensuite le 0.

Donc en faites, quand un groupe de chiffre commence par '9', tu prends les 4 chiffres qui sont derrière, tu confirmes?

Posté (modifié)

Sur 95020 comme j'ai d'abord vérifier que le premier chiffre est égal à 9 je prend le second qui est donc 5.

Le chiffre 5 est en quelque sorte la puissance,il est valable sur tous les blocs de chiffres suivant jusqu'a temps qu'un autre bloc de chiffres commence par 9.

Ensuite je passe au bloc de chiffres suivant,je regarde d'abord si le premier chiffre est égal à 9.

S'il l'est pas je prends les 2 premiers chiffres,ensuite les 2 suivants et enfin le dernier.

Ce qui donnerait pour ce bloc chiffre par exemple 46113

On regarde si le premier chiffre = 9,comme il l'y est pas on prend 2 premiers chiffres donc 46,on prend ensuite les 2 chiffres d'après donc 11 et enfin le 3 .

Modifié par snwoman49
Posté

euh on va essayer..

// Je pars du principe que tu as un tableau de chaines de 5 caractères $contenuu
$etat=0; //0: on a pas de 9, 1: on a trouvé un 9 (pour échapper les premiers quintés)

// une boucle pour parcourir ce tableau
for($i=0;$i<count($contenuu);$i++){
   if($contenuu[$i][0]=='9'){
       $contenuo=$contenuu[$i][1]; //On récupère le chiffre après le 9
       $etat=1;
   }else if($etat==1){
       $contenulat=$contenuu[$i][0].$contenuu[$i][1];
       $contenulong= $contenuu[$i][2].$contenuu[$i][3];
       $contenudir= $contenuu[$i][4];
       // Tu génères ton image ici...
   }
}

Je suis parti du principe que pour chaque quinté tu générais une image avec les valeur suivantes: $contenuo, $contenulat, $contenulong, $contenudir

Voilà, d'après tes expliquations, cela devrait fonctionner (pas testé bien sur)

Posté

Merci,j'ai tester voici l'url -http://www.meteorologic.org/foudre/test1.php

Mais ne faut il pas faire un substr() pour $contenuu ?

Car pour ca

for($i=0;$i<count($contenuu);$i++){
  if($contenuu[$i][0]=='9'){

Il faut d'abord dire que l'on prend que le premier chiffre.

Posté

:fou: euh une chaine de caractères est un tableau de caractères...

donc $contenuu[$i] est une chaine de caractère donc un tableau de caractères,

donc $contenuu[$i][0] est le premier caractère.

je n'utilise pas substr car on connait la taille de la chaine, il est plus rapide d'adresse directement chaque caractère que de faire un substr qui va inclure des tests. Désolé, c'est une vieille habitude pour le caulcul scientifique: trouvé de l'optimisation où on en voit pas l'intérêt :lol:

Posté

oh ca marche pas? La carte est vide...

au lieu de sortir la carte directement essaye en mode debug:

echo "$contenuo,$contenulat,$contenulong,$contenudir<br/>\n";

Pour voir si les valeurs extraites sont les bonnes ;)

Posté (modifié)

Oki pour l'optimisation.

Voici le code en entier

<?php
//la l'image
header ("Content-type: image/Png");
$fichierimage="http://meteorologic.net/images/j0france.jpg";
$im1 = imagecreatefromjpeg($fichierimage); /* Création d'une image blanche */


$fa = fopen("http://www.meteorologic.org/foudre/data.txt", "r");
$contenu=fread($fa,18000);

$egal= explode("=", $contenu);
$contenu = $egal[1];


$contenuu= explode(" ", $contenu);



for($i=0;$i<count($contenuu);$i++){
  if($contenuu[$i][0]=='9'){
      $contenuo=$contenuu[$i][1]; //On récupère le chiffre après le 9
      $etat=1;
  }else if($etat=='1'){

      $contenulat= $contenuu[$i][0].$contenuu[$i][1];
      $contenulong= $contenuu[$i][2].$contenuu[$i][3];
      $contenudir= $contenuu[$i][4];
   
$foudre = "http://meteorologic.net/images/previsprecipitation/".$contenuo.".gif";
$foudrebis  = imagecreatefromgif($foudre);
imagecopy ($im1, $foudrebis, $contenulat,$contenulong, 0, 0, 60, 60 );
  }
}

fclose($fa);

imagepng($im1);
imagedestroy($im1);
?>

C'est bizard ca n'affiche aucune image.

Modifié par snwoman49
Posté

essayes de voir si tu sors les bonnes valeurs:

<?php
$fa = fopen("http://www.meteorologic.org/foudre/data.txt", "r");
$contenu=fread($fa,18000);

$egal= explode("=", $contenu);
$contenu = $egal[1];


$contenuu= explode(" ", $contenu);



for($i=0;$i<count($contenuu);$i++){
 echo $contenuu[$i]." : ";
 if($contenuu[$i][0]=='9'){
     $contenuo=$contenuu[$i][1]; //On récupère le chiffre après le 9
     $etat=1;
 }else if($etat=='1'){

     $contenulat= $contenuu[$i][0].$contenuu[$i][1];
     $contenulong= $contenuu[$i][2].$contenuu[$i][3];
     $contenudir= $contenuu[$i][4];
     echo "$contenuo,$contenulat,$contenulong,$contenudir";
 }
 echo "<br/>\n";
}

fclose($fa);
?>

Posté

Edit en fet ca marche,c'est mon serveur qui faisait le couillon.

J'ai essayer sur l'autre et ca marche nickel.

Vous pouvez voir ca ici

-http://www.meteorologic.net/foudre/test1.php

Franchement vraiment merci. :)

Posté (modifié)

Bonjour.

J'ai un problème avec le code qui génère cette carte.Il la génère mais sans aucun éclair alors qu'il y a des données.

Voici le code.

<?php
//la l'image
header ("Content-type: image/Png");
$fichierimage="http://meteorologic.net/images/europe.gif";
$im1 = imagecreatefromgif($fichierimage); /* Création d'une image blanche */


$fa = fopen("http://www.meteorologic.org/foudre/data.txt", "r");
$contenu=fread($fa,1800000);
//on prend l'heure pour savoir à partir de quel endroit on va chercher dans le fichier data.txt
$min = date('i');
$day =date('d');
$hour = date('H', strtotime('-2 hours'));
if($min >= '45' && $min <= '59')
{
$egal= explode("".$day."".$hour."30", $contenu);
}
elseif($min >= '0' && $min <= '44')
{
$egal= explode("".$day."".$hour."00", $contenu);
}
//là on prend ce qu'il y a après l'endroit
$contenu = $egal[1];

$contenu = substr($contenu,20);
$contenuu = explode(" ", $contenu);


//on fait la bouche
for($i=0;$i<count($contenuu);$i++){
  if($contenuu[$i][0]=='9'){
      $contenuo=$contenuu[$i][1]; //On récupère le chiffre après le 9
      $etat='1';
  }
  elseif($etat=='1'){

      $contenulong= $contenuu[$i][0].$contenuu[$i][1];
      $contenulat= $contenuu[$i][2].$contenuu[$i][3];
      $contenudir= $contenuu[$i][4];
//on fait le passage de ° en px    
if ($contenulong >= '50')
{
$contenulong -= 50;
$contenulong *= -9;
$contenulong += 166;
}
elseif ($contenulong <= '50')
{
$contenulong -= 50;
$contenulong *= -1;
$contenulong *= +10;
$contenulong += 166;
}
       
   
if ( $contenudir >= '0' &&  $contenudir<= '4')
{
   
   $contenulat *= 8;
   $contenulat += 289;
   }
       elseif ( $contenudir >= '5' &&  $contenudir<= '9')
   {
   
   $contenulat *= -8;
   $contenulat += 289;
   }
//on fait le code pour copier chaque éclair à l'endroit voulu
$foudre = "http://www.meteorologic.org/images/foudre/".$contenuo.".gif";
$foudrebis  = imagecreatefromgif($foudre);
imagecopy ($im1, $foudrebis, $contenulat,$contenulong, 0, 0, 10, 13 );
  }
}
//on pourusuite le code
fclose($fa);
$textcolor = imagecolorallocate($im1, 0, 0, 0);
$dayy = date('d/m/Y');
imagestring($im1, 5, 10, 54, "".$dayy." ".$hour."h ".$min." min UTC", $textcolor);
imagepng($im1);
imagedestroy($im1);
//au passage un remerciement aux personnes qui m'ont aidées
?>

Modifié par snwoman49

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...