/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X T R A C T I O N   D E   V A L E U R S   D ' U N   F I C H I E R   N U M E R I Q U E  :                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/un_sur_N.01$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1997??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMPATIBILITE_20160222                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Permet de faire des calculs compatibles a ceux faits anterieurement au 20160222090648...  */

#define   AVERTIR_SI_LA_TAILLE_DES_PAQUETS_NE_DIVISE_PAS_LA_TAILLE_DU_FICHIER                                                           \
                    VRAI                                                                                                                \
                                        /* Pour supprimer ce message ('v $xiMo/LOG_xiMc$Z avertir=', introduit le 20040728183434).   */

#define   TAILLE_DES_PAQUETS                                                                                                            \
                    UN                                                                                                                  \
                                        /* Nombre d'elements a regrouper pour le calcul de ce qui sera edite.                        */
#define   NOMBRE_DE_PAQUETS                                                                                                             \
                    ZERO                                                                                                                \
                                        /* Nombre de paquets a creer. A priori, une valeur 'ZERO' indique que c'est la taille        */ \
                                        /* des paquets qui l'emporte. Par contre une autre valeur provoque le calcul de la taille    */ \
                                        /* des paquets en tant que rapport entre la taille du fichier et le nombre de paquets.       */ \
                                        /* Ceci a ete introduit le 20160222130137...                                                 */

#define   EDITER_LES_MESSAGES_D_EN_TETE                                                                                                 \
                    VRAI                                                                                                                \
                                        /* Controle de l'edition.                                                                    */

#define   EDITER_LE_MINIMUM________                                                                                                     \
                    FAUX
#define   EDITER_LE_MAXIMUM________                                                                                                     \
                    FAUX
#define   EDITER_LE_PREMIER________                                                                                                     \
                    VRAI
#define   EDITER_LE_DERNIER________                                                                                                     \
                    FAUX
#define   EDITER_LA_MOYENNE________                                                                                                     \
                    FAUX
#define   EDITER_LE_CUMUL__________                                                                                                     \
                    FAUX
#define   EDITER_L_ELEMENT_VARIABLE                                                                                                     \
                    FAUX
#define   NUMERO_DE_L_ELEMENT_VARIABLE                                                                                                  \
                    PREMIER_ELEMENT_D_UN_PAQUET
                                        /* Parametres de choix de ce qui sera edite. La possibilite d'editer un element de numero    */
                                        /* donne dans un paquet a ete introduit le 20081110130005...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   F I C H I E R  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214194148...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   VALEUR_IMPLICITE                                                                                                              \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_valeurs,liste_des_valeurs);
                                        /* Definition en memoire du fichier.                                                         */

#define   ELEMENT_DU_FICHIER(index)                                                                                                     \
                    gELEMENT_DU_FICHIER(liste_des_valeurs,index)                                                                        \
                                        /* Acces a un element courant du fichier.                                                    */

#define   PREMIER_ELEMENT_D_UN_PAQUET                                                                                                   \
                    PREMIER_ELEMENT_D_UN_FICHIER                                                                                        \
                                        /* Numero du premier element d'un paquet.                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E D I T I O N   D ' U N E   V A L E U R  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITION_D_UNE_VALEUR_CALCULEE(editer_la_valeur_courante,valeur,titre,IL_FAUT_editer_une_valeur_precedente)                    \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_la_valeur_courante))                                                                            \
                         Bblock                                                                                                         \
                         Test(IL_FAUT_editer_une_valeur_precedente)                                                                     \
                              Bblock                                                                                                    \
                              CAL2(Prin0(" "));                                                                                         \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_FAUT(editer_les_messages_d_en_tete))                                                                   \
                              Bblock                                                                                                    \
                              CAL2(Prin1("%s",titre));                                                                                  \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(valeur);                                                              \
                                        /* La procedure 'EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(...)' a ete introduite ici le      */ \
                                        /* 20030929092314 en remplacement de la sequence de code equivalente...                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition d'une valeur...                                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X T R A C T I O N   D E   V A L E U R S   D ' U N   F I C H I E R   N U M E R I Q U E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(compatibilite_20160222,COMPATIBILITE_20160222));
                                        /* Permet de faire des calculs compatibles a ceux faits anterieurement au 20160222090648...  */

#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(Logical,INIT(avertir_si_la_taille_des_paquets_ne_divise_pas_la_taille_du_fichier
                      ,AVERTIR_SI_LA_TAILLE_DES_PAQUETS_NE_DIVISE_PAS_LA_TAILLE_DU_FICHIER
                       )
          );
                                        /* Pour supprimer ce message ('v $xiMo/LOG_xiMc$Z avertir=', introduit le 20040728183434).   */

     DEFV(Int,INIT(taille_des_paquets,TAILLE_DES_PAQUETS));
     DEFV(Int,INIT(taille_effective_des_paquets,ZERO));
                                        /* Nombre d'elements a regrouper pour le calcul de ce qui sera edite. La notion de taille    */
                                        /* effective a ete introduite le 20160222085915 afin de permettre a la taille du fichier de  */
                                        /* ne plus diviser la taille du fichier...                                                   */
     DEFV(Int,INIT(nombre_de_paquets,NOMBRE_DE_PAQUETS));
                                        /* Nombre de paquets a creer. A priori, une valeur 'INFINI' indique que c'est la taille      */
                                        /* des paquets qui l'emporte. Par contre une autre valeur provoque le calcul de la taille    */
                                        /* des paquets en tant que rapport entre la taille du fichier et le nombre de paquets.       */
                                        /* Ceci a ete introduit le 20160222130137...                                                 */

     DEFV(Logical,INIT(editer_les_messages_d_en_tete,EDITER_LES_MESSAGES_D_EN_TETE));
                                        /* Controle de l'edition.                                                                    */

     DEFV(Logical,INIT(editer_le_minimum________,EDITER_LE_MINIMUM________));
     DEFV(Logical,INIT(editer_le_maximum________,EDITER_LE_MAXIMUM________));
     DEFV(Logical,INIT(editer_le_premier________,EDITER_LE_PREMIER________));
     DEFV(Logical,INIT(editer_le_dernier________,EDITER_LE_DERNIER________));
     DEFV(Logical,INIT(editer_la_moyenne________,EDITER_LA_MOYENNE________));
     DEFV(Logical,INIT(editer_le_cumul__________,EDITER_LE_CUMUL__________));
     DEFV(Logical,INIT(editer_l_element_variable,EDITER_L_ELEMENT_VARIABLE));
     DEFV(Int,INIT(numero_de_l_element_variable,NUMERO_DE_L_ELEMENT_VARIABLE));
                                        /* Parametres de choix de ce qui sera edite. La possibilite d'editer un element de numero    */
                                        /* donne dans un paquet a ete introduit le 20081110130005...                                 */
     DEFV(Int,INIT(numero_dans_le_paquet,PREMIER_ELEMENT_D_UN_PAQUET));
                                        /* Numero de l'element courant dans le paquet courant.                                       */
     DEFV(Float,INIT(minimum_________,F_INFINI));
     DEFV(Float,INIT(maximum_________,F_MOINS_L_INFINI));
     DEFV(Float,INIT(premier_________,FLOT__UNDEF));
     DEFV(Float,INIT(dernier_________,FLOT__UNDEF));
     DEFV(Float,INIT(cumul___________,FZERO));
     DEFV(Float,INIT(element_variable,FLOT__UNDEF));
                                        /* Valeurs courantes des elements a editer.                                                  */

     DEFV(Logical,INIT(introduire_un_K_NL,FAUX));
                                        /* Afin de ne pas introduire un saut de ligne devant la premiere ligne...                    */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"
                                        /* Ceci fut introduit le 20070103174400...                                                   */

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20160222=",compatibilite_20160222);

                         PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("fichier="
                                                 ,fichier_des_valeurs
                                                 ,liste_des_valeurs
                                                 ,VALEUR_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_L("avertir=",avertir_si_la_taille_des_paquets_ne_divise_pas_la_taille_du_fichier);

                         GET_ARGUMENT_I("taille_paquets=""taille=""paquets=",taille_des_paquets);
                         GET_ARGUMENT_I("nombre_paquets=""np=",nombre_de_paquets);

                         GET_ARGUMENT_L("messages=""message=""Men_tete=",editer_les_messages_d_en_tete);
                                        /* Le 20050623172729, "en_tete=" a ete remplace par "Men_tete=" (double definition...).      */

                         GET_ARGUMENT_L("minimum=""m=",editer_le_minimum________);
                         GET_ARGUMENT_L("maximum=""M=",editer_le_maximum________);
                         GET_ARGUMENT_L("premier=""p=",editer_le_premier________);
                         GET_ARGUMENT_L("dernier=""d=",editer_le_dernier________);
                         GET_ARGUMENT_L("moyenne=""moy=",editer_la_moyenne________);
                         GET_ARGUMENT_L("cumul=""c=",editer_le_cumul__________);
                         GET_ARGUMENT_L("element_variable=""ev=",editer_l_element_variable);
                         GET_ARGUMENT_I("numero_element_variable=""nev=",numero_de_l_element_variable);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                                        /* Cette procedure fut introduite le 20070103174400...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226192830...                                       */
                         )
                    );

     Test(IFNE(nombre_de_paquets,NOMBRE_DE_PAQUETS))
          Bblock
          EGAL(taille_des_paquets,QUOE(nombre_d_elements,nombre_de_paquets));
                                        /* La taille des paquets est egale au rapport entre la taille du fichier et le nombre de     */
                                        /* paquets (introduit le 20160222130137 pour 'v $xiird/.ACIN.Y1.1.$U Args_Paquets').         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(compatibilite_20160222)
              ,IL_FAUT(avertir_si_la_taille_des_paquets_ne_divise_pas_la_taille_du_fichier)
               )
          )
          Bblock
          Test(NON_DIVISIBLE(nombre_d_elements,taille_des_paquets))
               Bblock
               PRINT_ERREUR("la taille du fichier n'est pas un multiple de la taille des paquets");
               CAL1(Prer2("(elles valent respectivement %d et %d)\n"
                         ,nombre_d_elements
                         ,taille_des_paquets
                          )
                    );
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     DoIn(index
         ,PREMIER_ELEMENT_D_UN_FICHIER
         ,DERNIER_ELEMENT_D_UN_FICHIER
         ,I
          )
          Bblock
          DEFV(Float,INIT(valeur_courante,ELEMENT_DU_FICHIER(index)));
                                        /* Recuperation de la valeur courante dans le fichier.                                       */

          INCR(taille_effective_des_paquets,I);

          EGAL(minimum_________
              ,MIN2(minimum_________,valeur_courante)
               );
          EGAL(maximum_________
              ,MAX2(maximum_________,valeur_courante)
               );
          EGAL(premier_________
              ,COND(IFEQ(numero_dans_le_paquet,PREMIER_ELEMENT_D_UN_PAQUET),valeur_courante,premier_________)
               );
          EGAL(dernier_________
              ,COND(IFEQ(numero_dans_le_paquet,LSTX(PREMIER_ELEMENT_D_UN_PAQUET,taille_des_paquets)),valeur_courante,dernier_________)
               );
          INCR(cumul___________
              ,valeur_courante
               );
          EGAL(element_variable
              ,COND(IFEQ(numero_dans_le_paquet,numero_de_l_element_variable),valeur_courante,element_variable)
               );

          Test(IFOU(IFEQ(numero_dans_le_paquet,LSTX(PREMIER_ELEMENT_D_UN_PAQUET,taille_des_paquets))
                   ,COND(IL_FAUT(compatibilite_20160222)
                        ,TOUJOURS_FAUX
                        ,IFEQ(index,DERNIER_ELEMENT_D_UN_FICHIER)
                         )
                    )
               )
               Bblock
                                        /* Edition de quelques informations relatives au paquet courant (cela se fait lorsque l'on   */
                                        /* rencontre le dernier element de chaque paquet ; cela fait, au passage, que si le nombre   */
                                        /* d'elements du fichier n'est pas divisible par la taille des paquets, alors les            */
                                        /* informations relatives au dernier paquet ne sont pas editees...) :                        */
               Test(IL_FAUT(introduire_un_K_NL))
                    Bblock
                    CAL2(Prin0("\n"));
                                        /* Pas de saut de ligne devant la premiere ligne, mais uniquement sur les lignes suivantes.  */
                    Eblock
               ATes
                    Bblock
                    EGAL(introduire_un_K_NL,VRAI);
                    Eblock
               ETes

               EDITION_D_UNE_VALEUR_CALCULEE(editer_le_minimum________
                                            ,NEUT(minimum_________)
                                            ,"minimum="
                                            ,TOUJOURS_FAUX
                                             );
               EDITION_D_UNE_VALEUR_CALCULEE(editer_le_maximum________
                                            ,NEUT(maximum_________)
                                            ,"maximum="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,TOUJOURS_FAUX
                                                  )
                                             );
               EDITION_D_UNE_VALEUR_CALCULEE(editer_le_premier________
                                            ,NEUT(premier_________)
                                            ,"premier="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,IFOU(IL_FAUT(editer_le_maximum________)
                                                      ,TOUJOURS_FAUX
                                                       )
                                                  )
                                             );
               EDITION_D_UNE_VALEUR_CALCULEE(editer_le_dernier________
                                            ,NEUT(dernier_________)
                                            ,"dernier="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,IFOU(IL_FAUT(editer_le_maximum________)
                                                      ,IFOU(IL_FAUT(editer_le_premier________)
                                                           ,TOUJOURS_FAUX
                                                            )
                                                       )
                                                  )
                                             );
               EDITION_D_UNE_VALEUR_CALCULEE(editer_la_moyenne________
                                            ,DIVI(cumul___________
                                                 ,COND(IL_FAUT(compatibilite_20160222)
                                                      ,taille_des_paquets
                                                      ,taille_effective_des_paquets
                                                       )
                                                  )
                                            ,"moyenne="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,IFOU(IL_FAUT(editer_le_maximum________)
                                                      ,IFOU(IL_FAUT(editer_le_premier________)
                                                           ,IFOU(IL_FAUT(editer_le_dernier________)
                                                                ,TOUJOURS_FAUX
                                                                 )
                                                            )
                                                       )
                                                  )
                                             );
               EDITION_D_UNE_VALEUR_CALCULEE(editer_le_cumul__________
                                            ,cumul___________
                                            ,"cumul="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,IFOU(IL_FAUT(editer_le_maximum________)
                                                      ,IFOU(IL_FAUT(editer_le_premier________)
                                                           ,IFOU(IL_FAUT(editer_le_dernier________)
                                                                ,IFOU(IL_FAUT(editer_la_moyenne________)
                                                                     ,TOUJOURS_FAUX
                                                                      )
                                                                 )
                                                            )
                                                       )
                                                  )
                                             );
                                        /* Le cumul a ete introduit le 20031130165624.                                               */
               EDITION_D_UNE_VALEUR_CALCULEE(editer_l_element_variable
                                            ,element_variable
                                            ,"element_variable="
                                            ,IFOU(IL_FAUT(editer_le_minimum________)
                                                 ,IFOU(IL_FAUT(editer_le_maximum________)
                                                      ,IFOU(IL_FAUT(editer_le_premier________)
                                                           ,IFOU(IL_FAUT(editer_le_dernier________)
                                                                ,IFOU(IL_FAUT(editer_la_moyenne________)
                                                                     ,IFOU(IL_FAUT(editer_le_cumul__________)
                                                                          ,TOUJOURS_FAUX
                                                                           )
                                                                      )
                                                                 )
                                                            )
                                                       )
                                                  )
                                             );
                                        /* L'element variable a ete introduit le 20081110130005.                                     */

               EGAL(numero_dans_le_paquet,PREMIER_ELEMENT_D_UN_PAQUET);
                                        /* Reinitialisation du numero de l'element courant dans le paquet courant apres edition...   */
               EGAL(minimum_________,F_INFINI);
               EGAL(maximum_________,F_MOINS_L_INFINI);
               EGAL(premier_________,FLOT__UNDEF);
               EGAL(dernier_________,FLOT__UNDEF);
               EGAL(cumul___________,FZERO);
               EGAL(element_variable,FLOT__UNDEF);
                                        /* Reinitialisation des valeurs courantes des elements a editer apres edition...             */

               EGAL(taille_effective_des_paquets,ZERO);
               Eblock
          ATes
               Bblock
               INCR(numero_dans_le_paquet,I);
                                        /* Progression du numero de l'element courant dans le paquet courant dans le cas ou il       */
                                        /* n'y a pas eu d'edition...                                                                 */
               Eblock
          ETes
          Eblock
     EDoI

     CAL2(Prin0("\n"));
                                        /* "Fermeture" du fichier resultat (c'est-a-dire la sortie standard...).                     */

     lGENERATION_D_UN_FICHIER(liste_des_valeurs,VALEUR_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.