ZHB Posté(e) 24 août 2011 Partager Posté(e) 24 août 2011 Bonjour, J'ai extrait des données à l'aide de wgrib2 dans un fichier .txt. En admetant extraire 2 données différentes, le format de sortie est le suivant : lon,lat,ACPCP surface d=2011082318 9-10 hour acc fcst5.921000,45.791000,05.938780,45.791204,0...lon,lat,CDCON entire atmosphere (considered as a single layer) d=2011082318 10 hour fcst5.921000,45.791000,05.938780,45.791204,0... Chaque paramètre avec les valeurs étant l'un en-dessous de l'autre. Voulant insérer ces données dans une base SQL avec "LOAD DATA INFILE" il faudrait que le fichier de sortie corresponde à cette structure lon,lat,ACPCP surface d=2011082318 9-10 hour acc fcst,CDCON entire atmosphere (considered as a single layer) d=2011082318 10 hour fcst5.921000,45.791000,0,05.938780,45.791204,0,0... Les différents paramètres étant les uns à côté des autres. Savez-vous s'il est possible de modifier le format de sortie des fichiers wgrib2 ? j'arrête pas de chercher mais je ne vois pas comment faire. Merci, bonne journée Vince Lien à poster Partager sur d’autres sites More sharing options...
Tintin87 Posté(e) 24 août 2011 Partager Posté(e) 24 août 2011 J'ai pas mon script sous la main mais la technique est la suivante : -faire x fichier avec chacun une donnée -fusionner la dernière ligne de chaque fichier sur le fichier précédant On obtient ainsi ce que tu veux. Si tu veux ce soir je te dirai exactement comment j'ai fait. EDIT : Etant une bille en sql /emoticons/tongue@2x.png 2x" width="20" height="20"> , j'aimerai bien savoir comment tu fais après. Je me sert que de fichiers textes mais j’aimerai bien me servir de sql Lien à poster Partager sur d’autres sites More sharing options...
ZHB Posté(e) 24 août 2011 Auteur Partager Posté(e) 24 août 2011 Salut, Merci pour ta réponse. Alors il n'y a à ta connaissance pas de moyens de générer un format de fichier directement avec wgrib2 ? Je pensais également fusionner le fichier sur le fichier précédent avec PHP, mais j'ai peur que ce soit trop lent. Toutefois je veux bien que tu me dises ta méthode pour y arriver. Si non pour l'insertion en BDD je pensais simplement faire qqch comme ceci : try { $db = new PDO('mysql:host='.$host.';dbname='.$database, $user, $pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);}catch (PDOException $e) { echo $e->getCode(); echo $e->getMessage();}$db->exec("LOAD DATA INFILE 'chemin_vers_fichier_texte.txt' INTO TABLE t_fcst FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES STARTING BY '' TERMINATED BY '\n' IGNORE 1 LINES (fcst_latitude, fcst_longitude, fcst_TMP500, fcst_RH500, fcst_TMP700, etc...)"); Le fichier contenant les données doit avoir le format dont j'ai parlé dans mon premier message. Lien à poster Partager sur d’autres sites More sharing options...
Tintin87 Posté(e) 24 août 2011 Partager Posté(e) 24 août 2011 Pour l'instant je suis plus sur mon modèle WRF que sur l'amélioration de mon site (pas trop le temps de faire les deux en même temps). Cependant PDO n'est pas utilisable sur le serveur free... J'essayerai de mieux analyser ton code à l'occasion. Merci A plus tard. Lien à poster Partager sur d’autres sites More sharing options...
ZHB Posté(e) 24 août 2011 Auteur Partager Posté(e) 24 août 2011 Pour l'instant je suis plus sur mon modèle WRF que sur l'amélioration de mon site (pas trop le temps de faire les deux en même temps). Cependant PDO n'est pas utilisable sur le serveur free... J'essayerai de mieux analyser ton code à l'occasion. Merci A plus tard. Bon, PDO c'est juste pour acceder à la BDD donc un mysql_exec à la place et c'est bon. Par contre comme tu es chez free apparemment la configuration du serveur ne permet pas d'utiliser "LOAD DATA INFILE". Il semblerait que chez OVH ça fonctionne mais c'est à vérifier. Lien à poster Partager sur d’autres sites More sharing options...
Tintin87 Posté(e) 24 août 2011 Partager Posté(e) 24 août 2011 Bonsoir, comme prévu voici l'explication de mon script sh. 1) Récupération des données voulues avec wgrib2, création d'un fichier par donnée (temp.txt, pluie.txt, pression.txt...) 2) Copier un premier fichier texte avec le nom du fichier final voulu. cp APCP.txt GFS${time}.txt 3)Couper la derniere colonne de chaque fichier texte en créant des sous-fichiers pour chaque donnée cut -d " " -f3 ACPCP.txt > 1.txtcut -d " " -f3 Cape.txt > 2.txtcut -d " " -f3 Cloudhig.txt > 3.txt et ainsi de suite3)Fusionner les sous-fichiers ligne par ligne avec en premier le fichier final voulu (pour intégrer les coordonnées géographiques) paste -d " " GFS${time}.txt 1.txt > T1.txtpaste -d " " T1.txt 2.txt > T2.txtpaste -d " " T2.txt 3.txt > T3.txtpaste -d " " T3.txt 4.txt > T4.txt...paste -d " " T20.txt 21.txt > gfs${time}.txt On obtient ainsi le fichier voulu gfs${time}.txtVoilà, c'est peut-être laborieux mais ça marche, j'y ai mis du temps à tout trouver mais sur le net on trouve toujours ce que l'on veut ! Bon courage Lien à poster Partager sur d’autres sites More sharing options...
ZHB Posté(e) 24 août 2011 Auteur Partager Posté(e) 24 août 2011 Génial, j'étais justement partis sur une solution avec un "paste -d" suivi de tous les paramètres mais je ne savais pas comment supprimer les coordonnées avant. J'adopte donc ta solution qui me fais quand même des fichiers bien moins lourds. Merci beaucoup, Vince Lien à poster Partager sur d’autres sites More sharing options...
Météo-Data Posté(e) 24 novembre 2011 Partager Posté(e) 24 novembre 2011 Bonjour, Ayant été confronté à ce même problème, j'ai relevé le défi en PHP. Voici ce que j'ai su obtenir ... Un peu galère et peut-être améliorable mais ça marche. J'ai une vingtaine de fichiers de variables pour une vingtaine d'échéances et mon serveur perso sous intel core i5 met environ 2s pour l'execution. <?/*fichiers de données d'entrée, sortant de wgrib2 sous ce schéma : longitude,latitude,donnée. fichiers sous ce nom : "nom-variable"."echeance"."extension" (dans mon script par exemple la CAPE à l'échéance +48h avec une extension .gfs : cape.48.gfs)fichier de sortie data.gfs sous ce schéma : echeance|longitude|latitude|variable 1|variable 2|...|variable n| */// Connexion BDD si variables en BDDmysql_connect("***","***","***");mysql_select_db("***");// Initialisation des Arrays vides$variables = array();$compo = array();// Création du array de variable (solution avec une table des variables en MySQL ; sinon un simple array des variables convient).// $variables = array($variable1);$req = mysql_query("SELECT * FROM variables");while($rep = mysql_fetch_array($req)) { $variables[] = $rep['nom']; } // Définition du run de départ, arrivée et le pas (6h à 60h par pas de 3h)$depart = 6;$fin = 60;$pas = 3;// Boucle des échéanceswhile($depart <= $fin) { // Boucle des Variables foreach($variables as $key => $value) { // Si échéance < 10, on rajoute un zéro devant if($depart < 10){$echeance = "0$depart";} else{$echeance = $depart;} // Mise en Array du fichier de données $fichier = file("/var/www/data/gfs/$value.$echeance.gfs"); // Incrémentation du Array $compo à 0 $inc = 0; // Lecture ligne par ligne du fichier de donnée foreach($fichier as $row2) { // Séparation des données $file = explode(',',$row2); // Suppression des espaces $lon = preg_replace("# #", "", $file[0]); $lat = preg_replace("# #", "", $file[1]); $val = preg_replace("# #", "", $file[2]); // Si nous sommes à la 1ère variable, alors on mets les coordonnées + valeur. Sinon on ajoute la valeur en fin de ligne. if($key == 0){$compo[$echeance][$inc] = "$lon|$lat|$val|";} else{$compo[$echeance][$inc] .= "$val|";} // On incrémente le array $compo $inc++; } } // Incrémentation de l'échéance $depart = $depart + $pas; } /*Si un print_r($compo); est fait, nous obtenons ce résultat :[06] => Array( longitude 1|latitude 1|variable 1|variable 2|...|variable n| longitude 1|latitude 2|variable 1|variable 2|...|variable n| longitude 1|latitude 3|variable 1|variable 2|...|variable n| longitude n|latitude n|variable 1|variable 2|...|variable n| etc ... );[09] => Array( longitude 1|latitude 1|variable 1|variable 2|...|variable n| longitude 1|latitude 2|variable 1|variable 2|...|variable n| longitude 1|latitude 3|variable 1|variable 2|...|variable n| longitude n|latitude n|variable 1|variable 2|...|variable n| etc ... );[0n] => Array( longitude 1|latitude 1|variable 1|variable 2|...|variable n| longitude 1|latitude 2|variable 1|variable 2|...|variable n| longitude 1|latitude 3|variable 1|variable 2|...|variable n| longitude n|latitude n|variable 1|variable 2|...|variable n| etc ... );etc ... etc ...Maintenant on créé le fichier de données*/// Création du fichier de donnée data.gfs$out = fopen("/var/www/data/gfs/data.gfs", "w");fseek($out, 0);// On introduit le schéma en 1ère ligne pour s'y retrouver (facultatif)fputs($out, "echeance|longitude|latitude|".implode("|", $variables)."|\n");// Boucle de parcours des échéancesforeach($compo as $key2 => $value2) { // Boucle d'écriture des données foreach($value2 as $key3 => $value3) { // Pour ne pas recopier chaque 1ère ligne des fichiers de sortie de wgrib2 (longitude,latitude,valeur ...) if($key3 != 0) { fputs($out, "$key2|$value3\n"); } } }// On ferme le fichier et éventuellement la BDD et c'est fini !fclose($out);mysql_close();?> Si questions n'hésitez pas. Cordialement. Lien à poster Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant