<?php /* Vérifie si le fichier local vacsi-totgen-fra.csv est à jour Sinon, le reconstruit à partir du fichier vacsi-tot-a-fra.csv qui doit être plus ancien */ function testmaj_totgen_fra () { // fichier de référence et fichier à mettre à jour $csvref = "vacsi-tot-a-fra.csv"; $csvout = "vacsi-totgen-fra.csv"; // chemins d'accès à ces fichiers $ficref = DIR_CSV."/".$csvref; $ficout = DIR_CSV."/".$csvout; // si le fichier de référence n'est pas plus récent que celui à mettre à jour if (filemtime ($ficref) <= filemtime ($ficout)) { // on n'a rien à faire message ("Fichier ".$csvout." déjà à jour"); return; } // ouvrir le fichier de référence en lecture $descref = fopen ($ficref, "r"); // si l'ouverture s'est bien passée if ($descref) { // on va reconstruire le fichier csv local à partir du fichier de référence message ("Mise à jour du fichier ".$csvout); // pour l'instant, le nom du fichier à mettre à jour est provisoire $nouvcsv = DIR_CSV."/vacsi-totgen-fra.new"; // ouvrir ce fichier en écriture $descout = fopen ($nouvcsv, "w"); // si l'ouverture s'est bien passée if ($descout) { // recopier la première ligne du fichier de référence (date) fputs ($descout, fgets ($descref, LG_MAX_CSV)); // on va mémoriser les autres lignes de ce fichier dans l'ordre inverse $tabligne = array (); // lire la ligne suivante $ligne = fgets ($descref, LG_MAX_CSV); // trouver le nombre de doses mémorisées $args = explode (";", trim ($ligne), 20); $doses = (count ($args) - 2); // tant que non fin de fichier while ($ligne) { // mémoriser la ligne lue en début de liste array_unshift ($tabligne, $ligne); // lire la ligne suivante $ligne = fgets ($descref, LG_MAX_CSV); } // le premier élément peut directement être recopié dans le fichier à créer fputs ($descout, $tabligne [0]); // nombre d'éléments récoltés $nb_elem = count ($tabligne); // initialisation des compteurs de population $pop_totale = 0; for ($i = 0; $i < $doses; $i ++) $pop_dose [$i] = 0; // on va mémoriser les totaux pour plusieurs classes d'age dans un autre tableau $tabligtot = array (); // parcours de la suite des données mémorisées for ($j = 1; $j < $nb_elem; $j ++) { // séparer le champs d'une ligne de données $args = explode (";", $tabligne [$j], 10); // âge minimal déjà mémorisé dans les totaux de population $agemin = $args [0] + 1; // pour certains âges minimum switch ($agemin) { case 12 : case 18 : case 40 : case 60 : // fabriquer une ligne du fichier résultat // classse d'âge et population totale $ligne = $agemin.";".$pop_totale; // pour chaque dose de vaccin for ($i = 0; $i < $doses; $i ++) { // nombre de doses injectées $ligne = $ligne.";".$pop_dose [$i]; // calculer et rajouter les pourcentages $taux_dose [$i] = round (($pop_dose [$i]."00") / $pop_totale, 1); $ligne = $ligne."-".$taux_dose [$i]; } // fin de la ligne $ligne = $ligne."\n"; // rajouter la ligne au début du tableau des totaux array_unshift ($tabligtot, $ligne); default : // ne rien faire pour les classes d'âge intermédiaires break; } // rajouter la population pour la classe d'âge à celle des classes d'âge supérieures $pop_totale = $pop_totale + $args [1]; for ($i = 0; $i < $doses; $i ++) $pop_dose [$i] = $pop_dose [$i] + $args [$i + 2]; } // compléter le fichier avec les sommes de classes d'âge calculées foreach ($tabligtot as $ligne_csv) fputs ($descout, $ligne_csv); // remplissage fichier terminé fclose ($descout); // on remplace l'ancien fichier par le nouveau rename ($nouvcsv, $ficout); } // sinon else // message d'erreur si on n'a pas pu créer le fichier message ("Problème pour créer le fichier ".$csvout); // terminé avec le fichier de référence fclose ($descref); } // sinon else message ("Problème pour accéder au fichier ".$csvref); } ?>