begin process at 2010 02 09 16:34:09
  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...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 1,139 sec (3)

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