- 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