Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AAPPEND() AJOUTE LE CONTENU D'UN TABLEAU À UN AUTRE


Information sur la source

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.

 

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
	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 et avis

signaler à un administrateur
Commentaire de ThierryPerretier le 18/10/2004 21:45:43

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)

signaler à un administrateur
Commentaire de AbaqueInside le 19/10/2004 11:15:54

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

FONCTION GENERIQUE QUI RETOURNE UN TABLEAU [ par johnmary ] Bonsoir à tous,J'ai créé une fonction dans un module intitulé iofonctions.prg.FUNCTION FolderListe()PARAMETERS DrivePathDIMENSION ThePaths(1024)Inc=1 prob avec un append from [ par gregorian ] Bonjour, J'ai été voir cette fonction, et il me semble qu'elle répond tout a fait à mes attentes sauf un petit problème.Donc, probleme sur append [ par ducker88 ] Bonjour a tous, voici mon soucis, je voudrais copié les enregistrement d'une table A vers une table Bj'utilise donc la fonction append from;Pour scatter memvar [ par titi66 ] bonjour je bascule un application dév en fox pro 6 vers Fox pro 9je rencontre un pb avec scatter memvar : dans un form, j'ai un tableau public d& dll et tableau de caractères [ par medisys ] Bonjour, je dois déclarer dans mon application une fonction 'GetNom' de dll qui renvoie un tableau (taille 30) de caractères. Comment effectuer la d passage d'un tableau en param [ par gregorian ] Bonjour à tous, Voici mon souci. Dans un projet, je déclare des tableaux en PRIVATE.Ces tableaux doivent être rempli via une requete SQL (select <c Déclaration tableau [ par ducker88 ] Bonjour à tous,J'aimerai déclaré un tableau au sein d'une classe, pour ce faire j'utilise la fonction "Editer propriété méthodes" de foxpro. J'arrive


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.