Tableaux de vaccination à ce jour

Les choix du menu qui concernent les tableaux de vaccination à ce jour sont tous traités selon le même principe :
On va détailler le traitement pour le tableau général puis indiquer les différences pour les autres choix du menu.

Tableau général de la vaccination à ce jour

Comme pour toutes les autres pages de ce site relatives aux statistiques de vaccination, on utilise un modèle de fichier html.

Comme de script php qui génère cette page s'appelle tabjour.php le fichier html correspondant s'appelle tabjour.html

Le contenu de sa partie <body> est le suivant :
<body>
  <div id="contenu">
      <h1>Vaccination COVID 19 en France au XXXDATE</h1>
      <br>
      <table align="center" border="1" cellpadding="10">
          <tr align="center">
              <td>À partir de</td><td>Population</td>
              <td>1<sup>ère</sup> dose</td><td>2<sup>ème</sup> dose</td>
              <td>3<sup>ème</sup> dose</td><td>4<sup>ème</sup> dose</td>
              <td>% dose&nbsp;1</td><td>% dose&nbsp;2</td>
              <td>% dose&nbsp;3</td><td>% dose&nbsp;4</td>
          </tr>
          XXXTABLE
      </table>
      <br>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>
      
ce qui, pour la partie droite de la fenêtre du navigateur donnerait sans aucun traitement par un script PHP (mais des caractères 25 % plus grands) :



Le travail du script php tabjour.php va consister à :
Les scripts PHP qui génèrent les pages de ce site font appels à d'autres scripts PHP parmi lesquels constantes.php où sont définis les sous répertoires du site :

    define ('DIR_CSV',   "ref-csv"); // répertoires où sont stockés les fichiers csv
    define ('DIR_PAGES', "pages");   // répertoire des modèles de pages html
      
On commence par accéder au modèle de page HTML et à recopier le début en remplaçant dans l'entête noindex par index .
Ainsi, les modèles de page HTML ne seront pas référencés par les moteurs de recherche alors que les vrais pages du site le seront.

On continue de recopier le début du fichier HTML jusqu'à la ligne qui indique le début du contenu de la partie principale de la page.
    // modèle de page html
    $ficpage = DIR_PAGES."/table-gen.html";

    // ouvrir le fichier contenant la page à afficher
    $descfic = fopen ($ficpage, "r");

    // si l'ouverture s'est bien passée
    if ($descfic)
    {
        // recopier le début de l'entête html en remplaçant noindex par index
        copmaj ($descfic, "noindex,", "index,");

        // recopier le début du fichier html jusqu'à la zone contenu
        copie_jusque_chaine ($descfic, "contenu", 1);
      
On remarque que l'appel de la fonction copie_jusque_chaine (...) possède un 3ème paramètre égal à 1. Ça a pour conséquence que la ligne
      <div id="contenu">
du fichier HTML sera recopiée au lieu d'être sautée.

On vérifie alors si le fichier vacsi-totgen-fra.csv est à jour, mais comme il dépend du fichier vacsi-tot-a-fra.csv on vérifie et actualise si nécessaire ce premier fichier d'abord.

On peut alors accéder au fichier vacsi-totgen-fra.csv
    // vérifier si le fichier csv à utiliser est à jour
    // l'actualiser si nécessaire
    testmaj_tot_a_fra ();
    testmaj_totgen_fra ();

    // l'ouvrir en lecture
    $ficcsv = DIR_CSV."/vacsi-totgen-fra.csv";
    $descscv = fopen ($ficcsv, "r");

    // si l'ouverture s'est bien passée
    if ($descscv)
    {
        (...)
    }
    // sinon
    else
    {
        (...)
    }
      
Si tout s'est bien passé jusque là, on récupère la date qui figure en première ligne du fichier csv local, on la met au format jj/mm/aaaa et et on l'affiche au bon endroit dans la page HTML.
     // lire la date mémorisée (format aaaa/mm/jj)
     $datefic = trim (fgets ($descscv, 20));

     // la retourner au format jj/mm/aaaa
     $datefic = substr ($datefic, 8, 2)."/".substr ($datefic, 5, 2)."/".substr ($datefic, 0, 4);

     // recopier le début de fichier html en mettant la date dans le titre
     copmaj ($descfic, "XXXDATE", $datefic);
      
On recopie la suite du fichier HTML jusqu'à l'endroit où on doit remplir la table.
     // recopier le fichier html jusqu'au contenu de la table
     copie_jusque_chaine ($descfic, "XXXTABLE");
      
La première ligne de la table concerne la vaccination tous âges confondus. On va faire le même traitement pour toutes les lignes du fichier vacsi-totgen-fra.csv
    // lire l'âge minimum de la première ligne du fichier csv local
    $agemin = fgets ($descscv, 2);

    // classes d'âge pour la première ligne
    $cl_ages = "Tous âges";

    // répéter
    do
    {
        (....)

        // lire l'âge minimum de la ligne suivante
        $agemin = fgets ($descscv, 3);

        // classes d'âge pour la ligne suivante
        $cl_ages = $agemin." ans";
    }
    // jusque fin de fichier
    while ($agemin);
      
Les autres champs de chaque ligne seront tous recopiés dans la table dans l'ordre où ils apparaissent. Le traitement fait une fois dans les fonctions testmaj_... , plus précisément par la fonction selchamps_jour (...) qu'elles appellent permet de disposer de fichier csv locaux qu'on a très peu besoin de modifier pour générer les tables et les bargraphes.

Cependant, on veut franciser l'affichage en mettant une virgule à la place du point décimal pour les taux de vaccination qui seront suivis d'un %

Ce traitement n'a pas été fait directement dans le fichier vacsi-totgen-fra.csv car cela aurait compliqué son analyse pour réaliser des bargraphes.

Le premier champ de la ligne étant déjà lu, on lit la suite de la ligne et on cherche le premier point décimal.

À partir de cet endroit de la ligne, on remplace les points par des virgules et on rajoute des % avant chaque passage au champ suivant et après le dernier champ. Le début de la ligne reste inchangé.
    // lire la suite de la ligne
    $suite = trim (fgets ($descscv, LG_MAX_CSV));

    // séparer les nombres de vaccination des taux
    $pos_point = strpos ($suite, ".");
    $debsuite = substr ($suite, 0, $pos_point);
    $finsuite = substr ($suite, $pos_point);

    // franciser les . décimaux
    $finsuite = str_replace (".", ",", $finsuite);

    // rajouter les pourcentages
    $finsuite = str_replace (";", " %;", $finsuite)." %";
      
Il ne reste plus qu'à générer une ligne dans la table en remplaçant les délimiteurs de champs des fichier csv ";" par les balises HTML de changement de colonne.
    // mettre en forme la suite de la ligne
    $suite = str_replace (";", "</td><td>", $debsuite.$finsuite);

    // générer une ligne dans la table
    echo "          <tr align=\"center\">\n";
    echo "              <td>".$cl_ages.$suite."</td>\n";
    echo "          </tr>\n";
      
Dans le cas (très improbable en phase d'exploitation du site) où on ne pourrait pas accéder au fichier vacsi-totgen-fra.csv on affiche le titre de la page avec une date inconnue, suivi d'un message d'erreur en rouge, et un saute l'écriture de la table.
    // la date de mise à jour du fichier est inconnue
    copmaj ($descfic, "XXXDATE", "??/??/??");

    // message d'erreur
    echo '        <font color = "#FF0000">';
    echo "Fichier contenant les données inaccessible</font>\n";

    // sauter la table
    sauter_jusque_chaine ($descfic, "</table>");
      
Pour finir, dans tous les cas on termine le fichier HTML en rajoutant le menu dans la partie gauche de la page. La fonction genmenu utilisée sera détaillée dans une page de documentation spécifique.
    // copie la suite du fichier html jusqu'à la section du menu
    copie_jusque_chaine ($descfic, "XXXMENU");

    // générer le menu
    genmenu ("menu-vaccin", basename ($_SERVER ['SCRIPT_NAME']));

    // copier la fin de la page html
    copie_jusque_fin ($descfic);

    // terminé avec le fichier html
    fclose ($descfic);
      

Tableau de la vaccination par classe d'âge à ce jour

Pour remplir la table, le fichier csv local utilisé est vacsi-tot-a-fra.csv

On vérifie si ce fichier est à jour, et si nécessaire, on l'actualise grâce à un appel de la fonction testmaj_tot_a_fra ()
Ensuite, le remplissage de la table est très proche de celui réalisé pour l'état de la vaccination à ce jour à partir de certains âges.

Pour toutes les classes d'âge jusqu'à l'avant dernière, on va afficher l'âge minimum et l'âge maximum de la classe d'âge concernée.

Pour ça, on utilise 2 variables $agemin et $agemax

$agemax est le premier champ de la ligne lue. Chaque classe d'âge, sauf la dernière, est identifiées par un numéro représentant l'âge maximum pour cette classe.

$agemin correspond à un an de plus que la valeur $agemax de la classe d'âge précédente. La première classe d'âge commence à 0.

Mais il y a le cas particulier de la classe d'âge notée 80 qui signifie "à partir de 80 ans".

Dans la boucle qui traite les différentes lignes du fichier csv local, on commence par lire une ligne complète avant de séparer le premier champ (classe d'âge) du reste.

Les autres traitements, notamment la francisation des nombres décimaux et le rajout de % pour les taux de vaccination s'effectuent comme pour la table général décrite en détail plus haut.

On s'arrête après avoir traité la classe d'âge notée 80 . La catégorie "tous âges confondus" présent à la fin du fichier csv est donc ignorée.
    // initialisation
    $agemin = 0;

    // répéter
    do
    {
        // lire une ligne du fichier csv local
        $ligne = trim (fgets ($descscv, LG_MAX_CSV));

        // récupérer l'âge maximum sans 0 à gauche du chiffre
        $agemax = (substr ($ligne, 0, 2) + 0);

        // et la suite de la ligne
        $suite = substr ($ligne, 2);

        (....)

        // générer la tranche d'âge
        if ($agemin)
        {
            if ($agemin < 80)
                $ages = "de ".$agemin." à ".$agemax." ans";
            else
                $ages = "à partir de ".$agemin." ans";
        }
        else
            $ages = "jusqu'à ".$agemax." ans";

        // générer une ligne dans la table
        (....)

        // pour la ligne suivante
        $agemin = $agemax + 1;
    }
    // jusqu'à ce que toutes les classes d'âge soient traitées
    while ($ligne && $agemax < 80);
      

Tableau de la vaccination par département à ce jour

Pour ce tableau, on utilise le fichier csv vacsi-tot-dep.csv qui est mis à jour si nécessaire par la fonction testmaj_tot_dep ()
Il n'y a pas de traitement particulier à effectuer pour le code du département (un numéro à 2 chiffres sauf dans le cas de la Corse) qui est affiché tel quel.

On commence donc par lire une ligne complète du fichier csv avant de faire le même traitement pour les taux de vaccination que pour les 2 tables précédente.

On s'arrête après avoir traité toutes les lignes du fichier vacsi-tot-dep.csv
    // lire la ligne du premier département
    $ligne = trim (fgets ($descscv, LG_MAX_CSV));

    // tant que non fin de fichier
    while ($ligne)
    {
        (....)

        // lire la ligne suivante du fichier csv local
        $ligne = trim (fgets ($descscv, LG_MAX_CSV));
    }
      

Tableau de la vaccination par région et par DOM à ce jour

Jusqu'au début décembre 2021, la même page web présentait à la fois l'état de la vaccination à ce jour dans les régions de métropole et dans les départements d'outre-mer.

Les données des départements d'outre-mer n'apparaissant plus ensuite dans les fichiers de référence, des choix distincts ont été mis dans le menu pour accéder séparément à l'état de la vaccination par région et par DOM.

Pour le tableau de la vaccination par région, on utilise le fichier csv vacsi-tot-reg.csv qui est mis à jour si nécessaire par la fonction testmaj_tot_reg ()

Pour le tableau de la vaccination par DOM, on utilisé pendant 2 mois les données enregistrées dans le fichier csv vacsi-tot-dom.csv pour le 30 novembre 2021. Puis en février 2022, les données pour les DOM sont redevenues disponibles. La fonction testmaj_tot_dom () permet de mettre à jour le fichier csv local.

À part le nom de fichier csv local utilisé et la fonction appelée pour le mettre à jour, les fichiers PHP pour les tableaux de vaccination par département (de métropole), région et DOM sont à présent identiques.