L'auteur
FoxInCloud (Th. Nivelet) France Membre Simple # 0000000014 enregistré le 13/10/2004
http://www.foxincloud.com/ Nivelet Thierry 75016 Paris de la société Abaque Fiche personnelle
Note des membres
pas de note
|
Contributions > 01 - PRG : Programmation > Tableaux / Array
aAppend() - ajoute le contenu d'un tableau à un autre
# 0000000017
ajouté le 21/10/2004 09:47:58 et modifié le 30/03/2005
consulté 9751 fois
Niveau
débutant
|
Description |
Ce code illustre la façon dont VFP gère les tableaux.
Un tableau peut comporter 1 ou 2 dimensions maximum. VFP gère les tableaux par éléments séquentiels, aussi ce code est nécessaire pour ajouter des lignes à un tableau à 2 dimensions. aLen() permet de connaître le nombre de lignes [et de colonnes] d'un tableau
Ce code illustre aussi la fonction type() qui permet de vérifier précisément les paramètres passés. |
Code source : |
FUNCTION aAppend && Ajoute le contenu d'un tableau à un autre
LPARAMETERS ;
ta1,; && @ tableau résultat
ta2 && @ tableau ajouté au tableau ta1
LOCAL lnResult && nombre de lignes du tableau résultat
m.lnResult = 0
EXTERNAL ARRAY ta1, ta2 && pour le gestionnaire de projet
* Si des tableaux ont bien été passés
LOCAL llParms
m.llParms = NOT (Type('m.ta1[1]') == 'U' OR Type('m.ta2[1]') == 'U')
ASSERT m.llParms MESSAGE 'Les deux paramètres ta1 et ta2 doivent être des tableaux'
IF m.llParms
* Si le second tableau a des lignes
LOCAL lnRow1, lnRow2
m.lnRow1 = Iif(laEmpty(@m.ta1) , 0, Alen(m.ta1, 1)) && alen(m.ta1,1) Fonctionne pour 1 et 2 dimensions
m.lnRow2 = Iif(laEmpty(@m.ta2) , 0, Alen(m.ta2, 1))
m.lnResult = m.lnRow1 + m.lnRow2
IF m.lnRow2 > 0
* Ajuster le nombre de lignes et de colonnes du résultat
LOCAL lnCol1, lnCol2
m.lnCol1 = Alen(m.ta1, 2) && 0 si 1 dimension
m.lnCol2 = Alen(m.ta2, 2)
m.lnCol1 = Max(m.lnCol1, m.lnCol2)
DIMENSION m.ta1[m.lnResult, m.lnCol1]
* Pour chaque ligne du second tableau
LOCAL lnRow, lnCol
FOR m.lnRow = 1 TO m.lnRow2
* Si un des tableaux est à une dim.
IF m.lnCol1 * m.lnCol2 = 0
m.ta1[m.lnRow1 + m.lnRow] = m.ta2[m.lnRow]
* Sinon (les 2 tableaux sont à 2 dimensions)
ELSE
FOR m.lnCol = 1 TO Min(m.lnCol1, m.lnCol2)
m.ta1[m.lnRow1 + m.lnRow, m.lnCol] = m.ta2[m.lnRow, m.lnCol]
ENDFOR
ENDIF
ENDFOR
ENDIF
ENDIF
RETURN m.lnResult
*===================================================================
FUNCTION laEmpty && Ce tableau est vide
LPARAMETERS ta && @ Tableau à vérifier
LOCAL llResult
m.llResult = NULL
EXTERNAL ARRAY ta
LOCAL llParms
m.llParms = NOT Type('m.ta[1]') == 'U'
ASSERT m.llParms MESSAGE 'Le paramètre ta doit être un tableau'
IF m.llParms
m.llResult = Alen(m.ta) = 1 AND Vartype(ta[1]) = 'L' AND ta[1]=.F.
ENDIF
RETURN m.llResult
|
Commentaires |
Aucun commentaire enregistré ...
|