ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

aAppend() - ajoute le contenu d'un tableau à un autre   



L'auteur

FoxInCloud (Th. Nivelet)
France France
Membre Simple
# 0000000014
enregistré le 13/10/2004

http://www.foxincloud.com/
Nivelet Thierry
75016 Paris
de la société Abaque
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Tableaux / Array

aAppend() - ajoute le contenu d'un tableau à un autre
# 0000000017
ajouté le 21/10/2004 09:47:58 et modifié le 30/03/2005
consulté 4727 fois
Niveau débutant

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.
Code 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




Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0