L4G >  find  

Afficher tout Masquer tout

"find" permet de rechercher une valeur particulière dans une série de variables ou expressions numériques, alphanumériques ou dates.

 

Syntaxe

   find( valeur_à_chercher, liste_exprg ) [ <> 0 ]]

 

Paramètres

Elément

Description

Remarques

valeur_à_ chercher 

Expression à rechercher dans la liste des arguments qui suivent.

Aucune.

liste_exprg 

Liste d'expressions_généralisées séparées par le caractère ','.

Toutes les expressions doivent être du même type.

 

Exemples

   # Recherche simple : X est un tableau de valeurs déclaré comme X(1..N)
    I = find(VALEUR, X)
    Infbox VALEUR-"se trouve à la place"-I-" dans le tableau X"
   # Après une première saisie en tableau, se repositionner sur
   # la première colonne pour une valeur recherchée
    FNC_RECHERCHE
       Integer I
       I = find(VALEUR_RECH,[M]COLONNE1(0..[M]NBL-1))
       If I<>0
          zonsui = sum("COLONNE1(", num$(I-1), ")")
       Endif
   # Si I est nul, la recherche n'a pas abouti
    Return
     # Recherche de valeurs dans un tableau de chaînes
    Char LIGNES(5)(40)     :# 40 chaînes de 5 caractères maximum
    Gosub LIRE_LIGNES      :# Remplit le tableau LIGNES
    I = pat(sum(LIGNES(0..39)), "*A*")
    If I <> 0
       Infbox "Il y a un 'A' dans au moins l'une des lignes"
    Endif
    I = find("A", LIGNES(0..39))
    If I <> 0
       Infbox 'Il y a au moins l'une des lignes égale à "A" '
    Endif
  # transmettre la fonction Find à la base
For [AMK]CODMSK
  If [F:AMK]CODACT=ACTIV or find(ACTIV,[F:AMK]ACTBLOC(0..[F:AMK]NBBLOC-1))<>0
    OBJET = "AMK"
    NOM = [F:AMK]CODMSK
    TRAITE = [F:AMK]TRTSPE
    Gosub EXTOBJ : If !OK : Break : Endif
  Endif
Next

 

Description

"find" permet de rechercher une valeur particulière dans une série de variables ou d'expressions numériques, alphanumériques ou dates. "find" renvoie le rang de la valeur trouvée dans la liste donnée si la valeur est trouvée (de 1 au nombre de valeurs dans la liste) ou 0 si la valeur n'est pas trouvée.

Pour une recherche dans une série de valeurs numériques, on peut mêler des expressions et des variables de type Integer, Shortint, Decimal et Libelle.

Si l'un des arguments de la fonction est une variable dimensionnée sans précision d'indice ou d'intervalle d'indices, tous les éléments de la variable sont utilisés. La précision d'un indice ou d'un intervalle d'indice détermine les éléments à prendre en compte.

Si l'on donne un intervalle d'indices tel qu'il n'y a aucun élément dans la liste des variables à chercher (find(RECHERCHE, VALEURS(1..0)) par exemple) le résultat renvoyé est 0.

Le type du résultat est Integer.

La syntaxe du Find se terminant par "<>0" ou "=0" est à utiliser avec précaution. L'avantage de cette syntaxe est que la requête est plus performante. L'inconvénient est qu'il y a une limite dans le nombre d'éléments déclarés dans le Find de la clause where, qui provoque, à l'exécution, l'arrêt du traitement accompagné d'un message d'erreur. Sous Oracle, on a l'erreur"offset > 0x8000:too many values : Plus de mémoire disponible". La limite est de 60 champs alphanumériques ou 60 x 128 champs numériques pour les éléments de l'ensemble de la clause where..  

Avec  Find se terminant par "<>0" ou "=0", la fonction est transmise directement à la base de données. La requête transmise correspond à une liste de "ou" du point de vue du plan d'exécution de la base de données. Si le Find est un filtre discriminant, une clé devra exister commençant par le champ décrit par le Find pour que la requête soit performante. Oracle oriente alors sont plan d'exécution en autant de sous requêtes efficace qu'il y a de valeurs.

For [XXX] Where Find(CHAMP,3,5,9)<>0 # est traduit enSELECT ... Where CHAMP in (3,5,9)For [XXX] Where Find(CHAMP,3,5,9)=0 # est traduit enSELECT ... Where CHAMP not in (3,5,9)

Erreurs associées

Erreur

Description

ERMODE (10)

Les indices donnés ne sont pas numériques.

ERINDI ( 8)

Erreur de bornes pour des indices.

ERDOM (50)

Les arguments ne sont pas du même type, ou aucune valeur ne se trouve dans la liste (dans le cas de find(VALEURS(1..0)) par exemple).

ERDIM (55)

Trop de dimensions données.

 

Mots-clés associés

MAX - MIN - SUM - PRD - AVG - VAR - UNI