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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 762 fois - Téléchargée 31 fois

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

Ajouter un commentaire

Commentaires

ThierryPerretier
Messages postés
103
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
6 juillet 2006
-
Avec deux tableaux ayant un nombre de colonnes identiques, on peut écrire simplement :

nbTab1 = Alen(tab1)

DIMENSION tab1(Alen(tab1,1)+Alen(tab2,1), Alen(tab1,2))

Acopy(tab2, tab1, 1, Alen(tab2), nbTab1+1)
AbaqueInside
Messages postés
16
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
14 novembre 2009
1 -
aAppend() prend en charge les tableaux :
- à 1 ou 2 dimensions
- de nombre de colonnes différents

C'est une fonction générale pouvant être employée dans (pratiquement) toutes les situations.
bechirtn
Messages postés
1
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
25 février 2009
-
merci

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.