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