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.