Date de publication : 04/11/2006
Par
Igor2004 (nikiforov.developpez.com/foxpro/francais)
Mesdames et Messieurs, Je voudrais bien vous proposer gratuitement les fonctions FoxPro qui sont les suivantes IFOR() - Immédiat FOR cycle. IWHILE() - Immédiat WHILE cycle. ICASE() - Évalue les résultats d'une liste de conditions. IEXECCASE() - Évalue les résultats et exécute les commandes d'une liste de conditions. IEXECIF() - Renvoie une de deux valeurs et exécute une des deux chaînes de commande selon la valeur d'une expression logique. EXECUTE() - Exécute les commandes d'une chaîne. A la différence d'une macro substitution, peut exécuter les multiples commandes d'une chaîne et renvoyer le résultat. FIELDNUM() - Renvoie le nombre de champs, référence de nom d'un champ, dans une table. DANSLISTE() - Détermine si une expression numérique est contenue dans une liste de valeurs de type "1,5,13-18" (1 ou 5 ou 13 à 18). INCREMENT() - Effectue une incrément ou une décrément de la valeur d'une variable en fonction de la valeur passée en référence. STRFILTER() - Enlève tous les caractères d'une chaîne sauf ceux qui sont spécifiés. Travailler avec les tableaux : ARRAYSUM() - Effectue un total pour tous les éléments ou pour un groupe de lignes d'une colonne choisie. ARRAYAVG() - Calcule la moyenne arithmétique de tous les éléments ou pour ceux d'un groupe de lignes d'une colonne choisie. ARRAYMIN() – Restitue la valeur minimum trouvée parmi tous les éléments ou parmi ceux d'un groupe de lignes d'une colonne choisie. Peut aussi indiquer le nombre de fois que la valeur minimum a été trouvée. ARRAYMAX() - Restitue la valeur maximum trouvée parmi tous les éléments ou parmi ceux d'un groupe de lignes d'une colonne choisie. Peut aussi indiquer le nombre de fois que la valeur maximum a été trouvée. ARRAYCNT() - Compte tous les éléments numériques ou seulement ceux d'un groupe de lignes d'une colonne choisie. ASCANQUICK() - À la différence de la fonction intégrée ASCAN(), effectue une recherche dichotomique sur tous les éléments ou seulement ceux d'un groupe de lignes d'une colonne choisie. Le tableau doit être trié sur base de la colonne qui contient l'élément à rechercher. VITESCAN() - Effectue une recherche dichotomique sur tous les éléments ou seulement ceux d'un groupe de lignes d'une colonne choisie. Le tableau doit être trié sur base de la colonne qui contient l'élément à rechercher. Cette fonction est plus simple que ASCANQUICK(). GETALLWORDS() - Insère tous les mots d'une chaîne dans le tableau global. ARABTOROMAN()- Renvoie un nombre romain équivalent à une expression numérique spécifiée (de 1 à 3999). ROMANTOARAB()- Renvoie une expression numérique équivalente à un nombre romain spécifié (de I à MMMCMXCIX). Plus de 11 000 personnes ont deja telecharge mes fonctions pour MS SQL Server. Qui sait, peut-etre seront-ils utiles pour vous ? The ST_DENIS library is available for all versions Visual FoxPro through 9.0 and for FoxPro 2.6 for DOS. The VFP library is ST_DENIS.FLL and the FoxPro for DOS library is ST_DENIS.PLB. To register the library in your programs, use one of the SET LIBRARY commands: SET LIBRARY TO ST_DENIS.FLL ADDITIVE && for VFP or SET LIBRARY TO ST_DENIS.PLB ADDITIVE && for FoxPro for DOS It is best to place the library file in your search path (SET PATH command). If it is not in your search path, you will need to specify the path to the library file in the SET LIBRARY command: SET LIBRARY TO <PATH TO LIBRARY> ST_DENIS.FLL ADDITIVE To remove the library from memory, use: RELEASE LIBRAY ST_DENIS or, if the library is not in the search path, RELEASE LIBRARY <PATH TO LIBRARY> ST_DENIS |
Voici la description détaillée de quelques fonctions de la bibliothèque: FIELDNUM() Renvoie le rang du champ d'une table référencé par son nom. Syntaxe: FIELDNUM (tcFieldName[, tcAlias | nWorkArea]) Valeur renvoyée: Numérique Arguments: tcFieldName Chaîne de caractère indiquant le nom du champ. FIELDNUM( ) Renvoie zéro si le nom du champ spécifié n'existe pas. tcAlias Indique l'alias de la table dont FIELDNUM( ) renvoie le rang d'un champ. FIELDNUM( ) Renvoie zéro si le nom du champ spécifié n'existe pas. -ou- nWorkArea Indique la zone de travail de la table dont FIELDNUM( ) renvoie le rang d'un champ. FIELDNUM( ) Renvoie zéro si aucune table n'est ouverte dans la zone de travail. Si les arguments optionnels sont omis, (ou nWorkArea = 0), FIELDNUM( ) renvoie le rang du champ dans la table ouverte dans la zone de travail courante et renvoie zéro si aucune table n'y est ouverte. Exemple: Set Library To St_Denis Additive Close All Open Database (Home(2) + 'data\testdata') Noupdate Use customer Noupdate && Ouvre la table Customer * Nous devons trier le résultat de la requête par les champs City et Phone de la table Customer. * Nous utilisons une clause UNION, de ce fait nous ne pouvons pas utiliser les noms de champs après ORDER BY * Il est alors nécessaire de connaître le numéro des champs sur lesquels le tri est fait. pcOrderBy = Str(FieldNum([city],[ customer]))+[,]+Str(FieldNum([phone],[customer])) Select customer.*, orders.order_id, orders.emp_id ; From customer, orders Where customer.cust_id = orders.cust_id ; Union Select customer.*, Space(Len(orders.order_id)), Space(Len(orders.emp_id)) ; From customer Where customer.cust_id Not In ; (Select orders.cust_id From orders) Order By &pcOrderBy Into Cursor CurTest For gnCount = 1 To Fcount( ) && Boucle sur le nombre de champs. ? FIELDNUM (Field(gnCount)), Field(gnCount) && Affiche le rang de chaque champ Endfor Release Library St_Denis ARRAYMAX (@ArrayName, [nSearchColumn [, nStartRow [, nRowsSearched [, @NumRowWithMaxElem]]]]) Restitue la valeur maximum trouvée parmi tous les éléments ou parmi ceux d'un groupe de lignes d'une colonne choisie. Peut aussi renvoyer le nombre de lignes qui contiennent la valeur maximum. Valeur renvoyée Numeric, Currency, Character, DateTime, ou Date. ArrayName – Spécifie le nom de tableau dans lequel s'effectue la recherche. Le premier paramètre est passé par la référence, c'est pourquoi il doit être précédé par le signe @. nSearchColumn – Spécifie la colonne de tableau dans laquelle rechercher. Si vous omettez nSearchColumn, la première colonne est utilisée par défaut. Cette fonction génère une erreur si le nSearchColumn est plus grand que le nombre de colonnes disponibles. nStartRow – Spécifie le numéro de la ligne auquel commence la recherche. Ce numéro est inclus dans la recherche. Si l'argument nStartRow est omis, la recherche est effectuée par défaut sur l'ensemble des lignes de la colonne. nRowsSearched – Spécifie le nombre de lignes sur lesquelles la recherche sera effectuée. Si les arguments nStartRow et nRowsSearched sont omis, la recherche commence par la première ligne du tableau et se poursuit jusqu'à la dernière ligne. NumRowWithMaxElem – La variable, passée par référence, qui contiendra le numéro de ligne contenant la valeur maximum. Pour renvoyer une valeur dans NumRowWithMaxElem sans indiquer le nSearchColumn, le nStartRow, ou nRowsSearched, indiquez -1 pour ces paramètres. Cette fonction recherche la valeur maximale pour les éléments Numeric, Currency, Character, Date, ou DateTime. Si les éléments recherchés contiennent des valeurs de différents types, les priorités suivantes sont assumées : Numeric = Currency Numeric (Currency) > Character Character > DateTime (Date) DateTime = Date Si les paramètres de la recherche contiennent des éléments de types différents la priorité sera accordée aux recherches de la valeur maximum pour les types numériques ou devises (currency). Les éléments devise (currency) seront convertis en numérique. S'il n'y a aucun élément numérique ou devise dans la recherche, la valeur maximum de tous les éléments de type caractère sera retournée. S'il n'y a aucun élément de type caractère, la valeur maximum pour des éléments DateTime sera retournée, et ceux du type Date seront convertis en éléments de type DateTime. Dans le cas ou aucun des éléments mentionnés ci-dessus n'est rencontré, l'expression logique (.F.) sera retournée. Lors de la comparaison des chaînes de caractères, SET EXACT est utilisé. SET EXACT OFF ? 'asdf' < 'asdf ' && affiche .T. ? 'asdf' = 'asdf ' && affiche . F. SET EXACT ON ? 'asdf' < 'asdf ' && affiche .F. ? 'asdf' = 'asdf ' && affiche .T. Exemples d'utilisation de la fonction ARRAYMAX() Set Library To St_Denis Additive Close Database Open Database (Home(2) + 'data\testdata') Noupdate Use customer Noupdate Select Country, Maxordamt From customer Into Array ArrMaxordamt Order By 1 nMinElemRow = 0 ?ARRAYMAX(@ArrMaxordamt , 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne ',; ArrMaxordamt(nMinElemRow,1), ArrMaxordamt(nMinElemRow,2) Use products Noupdate Select * From products Into Array ArrProducts nMinElemRow = 0 lcSaveExact = Set('exact') Set Exact Off ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne (set exact off) ',; ArrProducts(nMinElemRow,2) Set Exact On ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne (set exact on) ',; ArrProducts(nMinElemRow,2) For lnI = 1 To Alen(ArrProducts, 1) ArrProducts(lnI, 2) = Alltrim(ArrProducts(lnI, 2)) Endfor ArrProducts(nMinElemRow - 1, 2) = ArrProducts(nMinElemRow, 2) + Space(1) Set Exact Off ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne (set exact off) ',; ArrProducts(nMinElemRow,2) Set Exact On ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne (set exact on) ',; ArrProducts(nMinElemRow,2) Set Exact &lcSaveExact **nous créons exprès une colonne contenant des valeurs de différents types de données ** parce que il y a des valeurs de type numérique, le maximum n'est recherché que parmi des éléments numériques For lnI = 1 To Alen(ArrProducts, 1) If Mod(lnI,3) = 0 ArrProducts(lnI, 2) = Val(ArrProducts(lnI, 1)) && Numeric Endif If Mod(lnI,5) = 0 ArrProducts(lnI, 2) = Ntom(Val(ArrProducts(lnI, 1))) && Currency Endif If Mod(lnI,7) = 0 ArrProducts(lnI, 2) = Date() - lnI && Date Endif If Mod(lnI,17) = 0 ArrProducts(lnI, 2) = .F. && Logical Endif Endfor ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne ',; ArrProducts(nMinElemRow,2) ** nous créons une colonne contenant des valeurs de type DATE For lnI = 1 To Alen(ArrProducts, 1) ArrProducts(lnI, 2) = Date() - lnI * Iif(Mod(lnI,2) = 0, -1, 1) If Mod(lnI,17) = 0 ArrProducts(lnI, 2) = .F. && Logical Endif Endfor ?ARRAYMAX(@ArrProducts, 2, -1, -1, @nMinElemRow) ?nMinElemRow,' est la ligne du tableau ArrProducts avec la valeur maximale dans la deuxième colonne ',; ArrProducts(nMinElemRow,2) Release Library St_Denis ASCANQUICK (@ArrayName, eExpression [, nStartRow[, nRowsSearched [, nSearchColumn [, nFlags ]]]]) À la différence de la fonction intégrée ASCAN(), effectue une recherche dichotomique sur tous les éléments ou seulement ceux d'un groupe de lignes d'une colonne choisie. Le tableau doit être trié sur base de la colonne qui contient l'élément à rechercher. Valeur renvoyée Numérique Arguments ArrayName Spécifie le tableau dans lequel s'effectue la recherche. Le premier paramètre est passé par la référence, c'est pourquoi il doit être précédé par le signe @. eExpression Spécifie l'expression à rechercher. nStartRow Spécifie le numéro de la ligne auquel commence la recherche. Ce numéro est inclus dans la recherche. Si l'argument nStartRow est omis, la recherche porte par défaut sur l'ensemble des lignes de la colonne. nRowsSearched Spécifie le nombre de lignes sur lesquelles la recherche sera effectuée. Si les arguments nStartRow et nRowsSearched sont omis, la recherche commence par la première ligne du tableau et se poursuit jusqu'à la dernière ligne. nSearchColumn – Spécifie la colonne de tableau à rechercher. C'est souvent utile pour les tableaux créés par des fonctions comme AFIELDS(). Visual FoxPro génère une erreur si le nSearchColumn est plus grand que le nombre de colonnes disponibles ou si nSearchColumn < -1 ou nSearchColumn = 0 . Notes Lorsqu'un élément répondant aux critères de recherche est trouvé, ASCANQUICK() renvoie le numéro de l'élément (ou de la ligne, si nFlags >= 8) contenant l'expression. En cas d'échec de la recherche, ASCANQUICK() renvoie la valeur 0. nFlags Spécifie des critères additionnels de recherche à appliquer lors du parcours du tableau. Par défaut, la recherche respecte les majuscules et les minuscules. Le nombre que vous indiquez fournit une valeur binaire qui détermine le respect des majuscules et minuscules ou le paramétrage de SET EXACT selon le tableau suivant : NFlag Bit Description 0 0000 Comportement existant dans Visual FoxPro 6 ou versions antérieures. 1 0001 Pas de distinction minuscules/majuscules. 2 0010 Comportement existant dans les versions antérieures de VFP 3 0011 Pas de distinction minuscules/majuscules. 4 0100 Exact OFF 5 0101 Pas de distinction minuscules/majuscules.; Exact OFF 6 0110 Exact ON 7 0111 Pas de distinction minuscules/majuscules.; Exact ON 8 1000 Renvoie un numéro de ligne. 9 1001 Pas de distinction minuscules/majuscules; Renvoie un numéro de ligne 10 1010 Renvoie un numéro de ligne. 11 1011 Pas de distinction minuscules/majuscules.; Renvoie un numéro de ligne 12 1100 Renvoie un numéro de ligne; Exact OFF 13 1101 Pas de distinction minuscules/majuscules.; Renvoie un numéro de ligne; Exact OFF 14 1110 Renvoie un numéro de ligne; Exact ON 15 1111 Pas de distinction minuscules/majuscules.; Renvoie un numéro de ligne; Exact ON Les valeurs des bits sont les suivantes (le bit 0 étant le plus à droite (3210)) : Bit Description 0 Si ON = pas de distinction majuscules/minuscules. 1 Si ON = EXACT ON, seulement actif si le bit 2 est positionné. 2 Outrepasse la fonction SET EXACT du système. 3 Renvoie un numéro de ligne si tableau en 2 dimensions. nFlags ne s'applique qu'à la fonction ASCANQUICK () et n'affecte pas le paramétrage de SET EXACT. Afin d'adapter le paramètre nFlags, vous devrez ignorer les paramètres optionnels en indiquant une valeur de -1. |