Aappend() ajoute le contenu d'un tableau à un autre

Contenu du snippet

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.

Source / Exemple :


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

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.