/*************************************************************************************************************************************/ /* */ /* F I L T R A G E " P A S S E - B A N D E " O U S E U I L L A G E D ' U N F I C H I E R N U M E R I Q U E : */ /* */ /* */ /* Note sur les listes de selection : */ /* */ /* Il est possible grace a 'v $xrv/passe_ban.01$K' */ /* de generer des listes de selection destinees a */ /* 'v $xrv/selection.01$K' de la facon suivante : */ /* */ /* $xrv/passe_ban.01$X \ */ /* ne=0 \ */ /* fichier=... \ */ /* minimum=... \ */ /* maximum=... \ */ /* marquer_hors_bande=VRAI valeur_inferieure=$NEXIST valeur_superieure=$NEXIST \ */ /* marquer_bande=VRAI valeur_intermediaire=$EXIST */ /* */ /* On obtient ainsi un fichier de selection dans */ /* lequel '$NEXIST' correspond aux valeurs qui */ /* sont hors bandes et '$EXIST' aux valeurs qui */ /* sont a l'interieur de ces memes bandes. */ /* */ /* */ /* Author of '$xrv/passe_ban.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 LES_TESTS_SONT_STRICTS_A_GAUCHE \ FAUX #define LES_TESTS_SONT_STRICTS_A_DROITE \ FAUX /* Pour definir la nature des tests a effectuer (introduit le 20020708180841). */ #define MINIMUM_DU_FICHIER \ F_MOINS_L_INFINI #define MAXIMUM_DU_FICHIER \ F_INFINI /* Pour definir le filtre "passe-bande" qui passe tout implicitement... */ #define EDITER_LES_VALEURS_HORS_BANDE \ FAUX \ /* Indique si l'on doit ou pas editer les valeurs hors de la bande. Lorsqu'elles sont */ \ /* editees ('VRAI'), on leur substitue les valeurs suivantes : */ #define VALEUR_INFERIEURE \ F_MOINS_L_INFINI #define VALEUR_SUPERIEURE \ F_INFINI /* Valeurs a substituer aux valeurs hors bandes lorsqu'elles sont editees... */ #define MARQUER_LES_VALEURS_DE_LA_BANDE \ FAUX \ /* Indique si l'on doit ou pas marquer les valeurs de la bande. Lorsqu'elles sont marquees, */ \ /* ('VRAI'), on leur substitue la valeur suivante : */ #define VALEUR_INTERMEDIAIRE \ FZERO \ /* Valeur a substituer aux valeurs de la bande lorsqu'elles sont marquees... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 20060214193105... */ #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. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I L T R A G E " P A S S E - B A N D E " O U S E U I L L A G E 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 #include xrv/ARITHMET.22.I" #include xci/valeurs.03.I" DEFV(Logical,INIT(les_tests_sont_stricts_a_gauche,LES_TESTS_SONT_STRICTS_A_GAUCHE)); DEFV(Logical,INIT(les_tests_sont_stricts_a_droite,LES_TESTS_SONT_STRICTS_A_DROITE)); /* Pour definir la nature des tests a effectuer (introduit le 20020708180841). */ DEFV(Float,INIT(minimum_du_fichier,MINIMUM_DU_FICHIER)); DEFV(Float,INIT(maximum_du_fichier,MAXIMUM_DU_FICHIER)); /* Pour definir le filtre "passe-bande". */ DEFV(Logical,INIT(editer_les_valeurs_hors_bande,EDITER_LES_VALEURS_HORS_BANDE)); /* Indique si l'on doit ou pas editer les valeurs hors de la bande. Lorsqu'elles sont */ /* editees ('VRAI'), on leur substitue les valeurs suivantes : */ DEFV(Float,INIT(valeur_inferieure,VALEUR_INFERIEURE)); DEFV(Float,INIT(valeur_superieure,VALEUR_SUPERIEURE)); /* Valeurs a substituer aux valeurs hors bandes lorsqu'elles sont editees... */ DEFV(Logical,INIT(marquer_les_valeurs_de_la_bande,MARQUER_LES_VALEURS_DE_LA_BANDE)); /* Indique si l'on doit ou pas marquer les valeurs de la bande. Lorsqu'elles sont marquees, */ /* ('VRAI'), on leur substitue la valeur suivante : */ DEFV(Float,INIT(valeur_intermediaire,VALEUR_INTERMEDIAIRE)); /* Valeur a substituer aux valeurs de la bande lorsqu'elles sont marquees... */ /*..............................................................................................................................*/ #include xrv/champs_5.1A.I" /* Ceci fut introduit le 20070103174154... */ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(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 ); PROCESS_ARGUMENT_F("seuil=" ,minimum_du_fichier ,BLOC(VIDE;) ,BLOC(Bblock EGAL(les_tests_sont_stricts_a_gauche,VRAI); EGAL(les_tests_sont_stricts_a_droite,VRAI); EGAL(editer_les_valeurs_hors_bande,VRAI); EGAL(maximum_du_fichier,minimum_du_fichier); Eblock ) ); /* Introduit le 20100103101507 afin de faciliter une utilisation de type "seuillage". Il */ /* faudra alors donner aussi les arguments suivants : */ /* */ /* tests_stricts_a_gauche=VRAI */ /* tests_stricts_a_droite=VRAI */ /* editer_hors_bande=VRAI */ /* valeur_marquage_inferieure=... */ /* valeur_marquage_superieure=... */ /* */ /* Ces valeurs garantissent alors un seuillage du type : */ /* */ /* <= seuil : valeur_marquage_inferieure */ /* > seuil : valeur_marquage_superieure */ /* */ /* comme le fait 'v $xiii/di_image$FON Ibinarisation_generale'... */ /* */ /* Le 20100105102620 le 'GET_ARGUMENT_F(...)' fut remplace par 'PROCESS_ARGUMENTS2_F(...)' */ /* afin de forcer les options necessaires au bon fonctionnement du seuillage. On notera */ /* qu'a cette occasion, ce 'PROCESS_ARGUMENTS2_F(...)' a ete place devant tous les */ /* 'GET_ARGUMENT_?(...)' correspondant aux 'EGAL(...)'s ci-dessus de facon a pouvoir */ /* outrepasser ces initialisations a priori... */ /* */ /* Jusqu'au 20150222125337 et au 20150222184825, il y avait ici : */ /* */ /* PROCESS_ARGUMENTS2_F("seuil=" */ /* ,minimum_du_fichier */ /* ,maximum_du_fichier */ /* ,BLOC(VIDE;) */ /* ,BLOC(Bblock */ /* EGAL(les_tests_sont_stricts_a_gauche,VRAI); */ /* EGAL(les_tests_sont_stricts_a_droite,VRAI); */ /* EGAL(editer_les_valeurs_hors_bande,VRAI); */ /* Eblock */ /* ) */ /* ); */ /* */ /* mais la consequence de cela est que cela donnait SYSTEMATIQUEMENT a l'argument */ /* 'maximum_du_fichier' la valeur 'minimum_du_fichier'... */ GET_ARGUMENT_L("tests_stricts_a_gauche=""strict_gauche=""gauche=""sg=",les_tests_sont_stricts_a_gauche); GET_ARGUMENT_L("tests_stricts_a_droite=""strict_droite=""droite=""sd=",les_tests_sont_stricts_a_droite); /* Arguments completes le 20180522135121 par "sg=" et "sd="... */ GET_ARGUMENT_F("minimum=""m=",minimum_du_fichier); GET_ARGUMENT_F("maximum=""M=",maximum_du_fichier); GET_ARGUMENT_L("marquer_hors_bande=""editer_hors_bande=""hors_bande=""hb=",editer_les_valeurs_hors_bande); /* Arguments completes par "marquer_hors_bande=" 20120503120102958 et par "hb=" le */ /* 20180522135302... */ GET_ARGUMENT_F("valeur_marquage_inferieure=""valeur_inferieure=""vi=",valeur_inferieure); GET_ARGUMENT_F("valeur_marquage_superieure=""valeur_superieure=""vs=",valeur_superieure); /* Arguments completes le 20180522135302 par "vi=" et "vs="... */ GET_ARGUMENT_L("marquer_bande=""marquer=""mb=",marquer_les_valeurs_de_la_bande); /* Arguments completes par "marquer_bande=" le 20120503114958 et completes le 20180522135302 */ /* par "mb="... */ GET_ARGUMENT_F("valeur_intermediaire=""valeur_bande=""vb=",valeur_intermediaire); /* Arguments completes par "valeur_bande=" le 20120503114958 et par "vb=" le 20180522135302. */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3; /* Cette procedure fut introduite le 20070103174154... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226192646... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5; /* Cette procedure fut introduite le 20211005105807... */ ) ); gOPERATION_SUR_LES_FICHIERS(BLOC( DEFV(Float,INIT(valeur_courante,ELEMENT_DU_FICHIER(index))); /* Recuperation de la valeur courante dans le fichier. */ ) ,COND(INCLcc(valeur_courante ,minimum_du_fichier,maximum_du_fichier ,les_tests_sont_stricts_a_gauche,les_tests_sont_stricts_a_droite ) ,COND(IL_NE_FAUT_PAS(marquer_les_valeurs_de_la_bande) ,valeur_courante ,valeur_intermediaire ) ,COND(IFLc(valeur_courante,minimum_du_fichier,NOTL(les_tests_sont_stricts_a_gauche)) ,valeur_inferieure ,COND(IFGc(valeur_courante,maximum_du_fichier,NOTL(les_tests_sont_stricts_a_droite)) ,valeur_superieure ,FLOT__UNDEF ) ) ) ,IFOU(IL_FAUT(editer_les_valeurs_hors_bande) ,INCLcc(valeur_courante ,minimum_du_fichier,maximum_du_fichier ,les_tests_sont_stricts_a_gauche,les_tests_sont_stricts_a_droite ) ) ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes ); /* Filtrage "passe-bande" du fichier... */ lGENERATION_D_UN_FICHIER(liste_des_valeurs,VALEUR_IMPLICITE); RETU_Commande; Eblock ECommande