/*************************************************************************************************************************************/
/* */
/* 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.