snwoman49 Posté 9 Septembre 2005 Posté 9 Septembre 2005 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
Portekoi Posté 9 Septembre 2005 Posté 9 Septembre 2005 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
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 (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é 9 Septembre 2005 par snwoman49
Portekoi Posté 9 Septembre 2005 Posté 9 Septembre 2005 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?
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 (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é 9 Septembre 2005 par snwoman49
Portekoi Posté 9 Septembre 2005 Posté 9 Septembre 2005 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?
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 (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é 9 Septembre 2005 par snwoman49
rportal Posté 9 Septembre 2005 Posté 9 Septembre 2005 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 tableaufor($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)
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 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.
rportal Posté 9 Septembre 2005 Posté 9 Septembre 2005 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
rportal Posté 9 Septembre 2005 Posté 9 Septembre 2005 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
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 (modifié) Oki pour l'optimisation. Voici le code en entier <?php//la l'imageheader ("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é 9 Septembre 2005 par snwoman49
rportal Posté 9 Septembre 2005 Posté 9 Septembre 2005 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);?>
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 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.
rportal Posté 9 Septembre 2005 Posté 9 Septembre 2005 les foudres au large de la normandie, c'est ce que tu voulais?
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 La il faut que je convertisse les ° en px et c'est bon. Merci encore.
snwoman49 Posté 9 Septembre 2005 Auteur Posté 9 Septembre 2005 Voici le réulstat -http://www.meteorologic.net/cartefoudre/europe.png Encore merci.
snwoman49 Posté 13 Septembre 2005 Auteur Posté 13 Septembre 2005 (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'imageheader ("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 bouchefor($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é 13 Septembre 2005 par snwoman49
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant