begin process at 2010 07 29 20:54:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

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

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



 Sources du même auteur

AUTOMATION DE WORD AVEC VFP
ASUBFOLDERS() TABLEAU DES SOUS-DOSSIERS D'UN DOSSIER
FILESPROC() && APPLIQUE UNE PROCÉDURE À TOUS LES FICHIERS D'...
CEUROANSI() CHAINE DE CARACTÈRES DÉSACCENTUÉE
VISUAL FOXPRO : PRÉSENTATION GÉNÉRALE

 Sources de la même categorie

RENOMMER LE PRÉFIXE DE TOUS LES FICHIERS D'UN DOSSIER par mike_vk
COULEUR HEXADECIMAL par tmcuh
Source avec Zip ITERATION par DDU de AtoutFox
CRYPTE/DECRYPTE par FredArmoni
CONTRÔLE DU NUMÉRO DE TVA (BELGE) par johnmary

Commentaires et avis

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)

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.

Commentaire de bechirtn le 25/02/2009 22:31:47

merci

 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

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales