/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E L I M I N A T I O N   D E S   C A R A C T E R E S   N O N   R E C O N N U S  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xcp/car_controle$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19991027163239).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____PAS_DE_LIBRAIRIES_DYNAMIQUES
                                        /* Introduit le 20070423093254 pour 'v $xcg/FiltrMail$vv$Z car_controle.X' et ce afin de     */
                                        /* ne pas "perdre visuellement" des courriers dans des circonstances malheureuses...         */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ELIMINER_LES_CARACTERES_NON_RECONNUS                                                                                          \
                    VRAI                                                                                                                \
                                        /* Faut-il eliminer ('VRAI') ou substituer ('FAUX') les caracteres non reconnus.             */
#define   ELIMINER_LES_CARACTERES_NON_ALPHA_NUMERIQUES                                                                                  \
                    FAUX                                                                                                                \
                                        /* Faut-il alors eliminer les caracteres non alpha-numeriques ('VRAI') ? Ceci a ete          */ \
                                        /* introduit le 20041221141859...                                                            */

#define   MARQUEUR_DES_CARACTERES_NON_RECONNUS                                                                                          \
                    K_BLANC                                                                                                             \
                                        /* Si 'IL_NE_FAUT_PAS(eliminer_les_caracteres_non_reconnus)' donne le caractere de           */ \
                                        /* substitution des caracteres non reconnus.                                                 */

#define   END_OF_CHAIN_EST_ALPHA_NUMERIQUE                                                                                              \
                    VRAI                                                                                                                \
                                        /* 'END_OF_CHAIN' est alpha-numerique ('VRAI') ou pas ('FAUX'). Cet indicateur a ete         */ \
                                        /* introduit le 20040906152142...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E L I M I N A T I O N   D E S   C A R A C T E R E S   N O N   R E C O N N U S  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(eliminer_les_caracteres_non_reconnus,ELIMINER_LES_CARACTERES_NON_RECONNUS));
                                        /* Faut-il eliminer ('VRAI') ou substituer ('FAUX') les caracteres non reconnus.             */
     DEFV(Logical,INIT(eliminer_les_caracteres_non_alpha_numeriques,ELIMINER_LES_CARACTERES_NON_ALPHA_NUMERIQUES));
                                        /* Faut-il alors eliminer les caracteres non alpha-numeriques ('VRAI') ? Ceci a ete          */
                                        /* introduit le 20041221141859...                                                            */

     DEFV(CHAR,INIT(marqueur_des_caracteres_non_reconnus,MARQUEUR_DES_CARACTERES_NON_RECONNUS));
                                        /* Si 'IL_NE_FAUT_PAS(eliminer_les_caracteres_non_reconnus)' donne le caractere de           */
                                        /* substitution des caracteres non reconnus.                                                 */

     DEFV(Logical,INIT(END_OF_CHAIN_est_alpha_numerique,END_OF_CHAIN_EST_ALPHA_NUMERIQUE));
                                        /* 'END_OF_CHAIN' est alpha-numerique ('VRAI') ou pas ('FAUX'). Cet indicateur a ete         */
                                        /* introduit le 20040906152142...                                                            */

     DEFV(Char,INIT(caractere_courant,K_UNDEF));
                                        /* Caractere courant.                                                                        */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("eliminer=",eliminer_les_caracteres_non_reconnus);
                         GET_ARGUMENT_N("marquer=",eliminer_les_caracteres_non_reconnus);
                         GET_ARGUMENT_L("enan=""eliminer_non_alpha_numerique=",eliminer_les_caracteres_non_alpha_numeriques);
                         GET_ARGUMENT_N("conserver_non_alpha_numerique=""cnan=",eliminer_les_caracteres_non_alpha_numeriques);

                         GET_ARGUMENT_K("marqueur=",marqueur_des_caracteres_non_reconnus);

                         GET_ARGUMENT_L("eoc=""EOC=""END_OF_CHAIN=",END_OF_CHAIN_est_alpha_numerique);
                                        /* On notera que c'est 'END_OF_CHAIN_est_alpha_numerique' qui est positionne ici et          */
                                        /* non pas 'est_ce_alpha_numerique_____END_OF_CHAIN_doit_etre_dans_la_liste' et ce afin      */
                                        /* de ne pas perturber differentes procedures qui utilisent                                  */
                                        /* 'MOVE_CARACTERE_____ne_deplacer_que_les_caracteres_alpha_numeriques'                      */
                                        /* ('v $xig/fonct$vv$FON C_EST_ALPHA_NUMERIQUE.END_OF_CHAIN.').                              */
                         )
                    );

     Tant(GetcharT(caractere_courant))
          Bblock
                                        /* Le caractere courant de l'entree courante est recupere ; et on boucle                     */
                                        /* sur cette recuperation tant que l'on n'est pas au bout du fichier.                        */
          DEFV(Logical,INIT(le_caractere_courant_est_alpha_numerique,LUNDEF));
                                        /* Le caractere courant est-il alpha-numerique ou pas ?                                      */

          EGAL(est_ce_alpha_numerique_____END_OF_CHAIN_doit_etre_dans_la_liste,END_OF_CHAIN_est_alpha_numerique);
                                        /* On notera que 'est_ce_alpha_numerique_____END_OF_CHAIN_doit_etre_dans_la_liste' est       */
                                        /* modifie de facon tres "locale" afin de ne pas perturber differentes procedures qui        */
                                        /* utilisent 'MOVE_CARACTERE_____ne_deplacer_que_les_caracteres_alpha_numeriques'            */
                                        /* ('v $xig/fonct$vv$FON C_EST_ALPHA_NUMERIQUE.END_OF_CHAIN.').                              */

          EGAL(le_caractere_courant_est_alpha_numerique,est_ce_alpha_numerique(caractere_courant));
                                        /* Test du caractere courant.                                                                */
                                        /*                                                                                           */
                                        /* On notera bien que 'est_ce_alpha_numerique_____le_caractere_a_tester_est_dans_la_liste',  */
                                        /* indicateur renvoye par 'est_ce_alpha_numerique(...)', ne signifie pas que le caractere    */
                                        /* teste est alpha-numerique, mais plutot qu'il figure dans la liste definie par 'Choi(...)' */
                                        /* dans cette fonction et que l'une des deux procedures 'C_EST_ALPHA_NUMERIQUE(...)' et      */
                                        /* 'CE_N_EST_PAS_ALPHA_NUMERIQUE(...)' l'a reconnu ; les caracteres dits "non reconnus"      */
                                        /* sont ceux qui correspondent au 'Defo' du 'Choi(...)'...                                   */

          EGAL(est_ce_alpha_numerique_____END_OF_CHAIN_doit_etre_dans_la_liste,VRAI);
                                        /* Restauration de 'est_ce_alpha_numerique_____END_OF_CHAIN_doit_etre_dans_la_liste'...      */

          Test(IFET(EST_VRAI(est_ce_alpha_numerique_____le_caractere_a_tester_est_dans_la_liste)
                   ,IFOU(EST_VRAI(le_caractere_courant_est_alpha_numerique)
                        ,IFET(EST_FAUX(le_caractere_courant_est_alpha_numerique)
                             ,IL_NE_FAUT_PAS(eliminer_les_caracteres_non_alpha_numeriques)
                              )
                         )
                    )
               )
                                        /* Avant le 20041221141859, le 'Test(...)' precedent etait :                                 */
                                        /*                                                                                           */
                                        /*        Test(EST_VRAI(est_ce_alpha_numerique_____le_caractere_a_tester_est_dans_la_liste)) */
                                        /*                                                                                           */
                                        /* tout simplement...                                                                        */
               Bblock
               CALS(Putchar(caractere_courant));
                                        /* Seuls les caracteres reconnus sont emis...                                                */
               Eblock
          ATes
               Bblock
               Test(IL_FAUT(eliminer_les_caracteres_non_reconnus))
                    Bblock
                    Eblock
               ATes
                    Bblock
                    CALS(Putchar(marqueur_des_caracteres_non_reconnus));
                                        /* Les caracteres non reconnus peuvent etre marques...                                       */
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     ETan

     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.