Developpez.com - SGBD & SQL
X

Choisissez d'abord la catégorieensuite la rubrique :


Espace Web FoxPro français d'Igor Nikiforov

Date de publication : 04/11/2006

Par Igor2004 (nikiforov.developpez.com/foxpro/francais)
 

Les fonctions utilisateurs FoxPro.

               Version PDF   Version hors-ligne


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.
Pour plus d'information, veuillez visiter
anglais
allemand
espagnol

Les fonctions sur chaîne de caractères en Transact-SQL, PL/SQL
français
anglais
allemand
espagnol


The team of Visual Extend sends a big Thank You for the allowance
to integrate the very nice functions into the new version 9.5 of the Framework VFX.



               Version PDF   Version hors-ligne

Valid XHTML 1.1!Valid CSS!

Contacter le responsable de la rubrique SGBD & SQL