1- se servire de l'objet ArrayLib de la Classe Utility.vcx et ou vous avez les méthode AcolScan DelAitem InsAitem
Simple d'utilisation mais un p'tit peu lente.
2- Si vous avez Vfp 7 et + et sont intellisense Manager Je l'appel "DeclareAlen"
Prendre soin d'initialiser n_column et c_na
#DEFINE N_COLUMN && N COLUMN #DEFINE C_NA && NAME ARRAY oSource.MyArray ou MyArray DECLARE C_NA(ALEN(C_NA,1)+IIF(VARTYPE(C_NA(ALEN(C_NA,1),1))="L",0,1),N_COLUMN)
3- IncArray(@MyArray) pour toutes les versions 3 et +
4- oIncArray(oSource,"MyArray" pour toutes les versions 3 et +
Code source :
* La utility.vcx n'étant pas de moi je vous encourage à l'étudier * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fox7help/html/smpsample_class_libraries.asp
#if.f.&& commentaire
Passons à la deuxième méthode
Prenez soin de la mettre dans l'intellisense Manager.
Quand vous en servire ?
Posez-vous les questions suivantes
Ai-je besoin d'incrémeter un tableau dont j'ignore le contenu de la dernière rangée ? Oui
Oui m'est si son contenu n'est pas encore
initialisé ai-je vraiment besoin de l'incrémenter ? non
Voilà l'utilité de mes trois prochaines fonctions
La première que j'ai placé dans l'itellisense Manager
et que j'appel DeclareAlen est plus simple que n'y parrait
#DEFINE N_COLUMN && N COLUMN
#DEFINE C_NA && NAME ARRAY
DECLARE C_NA(ALEN(C_NA,1)+IIF(VARTYPE(C_NA(ALEN(C_NA,1),1))="L",0,1),N_COLUMN)
Dans les faits une seule ligne est exécutée
DECLARE C_NA(ALEN(C_NA,1)+IIF(VARTYPE(C_NA(ALEN(C_NA,1),1))="L",0,1),N_COLUMN)
Grace à #Define, c_na peut prendre le nom de n'importe quel source de tableau qu'il soit local,private,public ou un tableau attaché un objet, elle est tres efficace
Décomposons là
Declare c_na(5,2) && je sais vous compremez tous
Remplacons 5 par Alen(c_na,1)
Declare c_na(Alen(c_na,1)+1,2) && c'est certain que le tablea va s'incrémenter
Ce qui ne permet pas de répondre à nos deux question sité ci-dessus
C'est là l'utilité et la subtilité d'un iif(,,)
iif(VARTYPE(C_NA(ALEN(C_NA,1),1))="L" , 0 , 1)
si VARTYPE(C_NA(ALEN(C_NA,1),1))="L"c'est que la derniere rangée n'a pas été initialisé
= 0
dans un cas contraire commene VARTYPE(C_NA(ALEN(C_NA,1),1)) serait "C" ou "D" ou "N"
= 1
ce qui fait que si l'on remplace +1 de Declare c_na(Alen(c_na,1)+1,2)
nous allons avoir
Et pour finir grace à #DEFINE on obtien une flexibilité du code qui ferait rougir ben des codeurs
#define n_column
et là on remplace ,2 par n_column
#define c_na MyArray
ou
#define c_na oSource.MyArray
va faire que avant de compiler le préprocesseur de fox va remplacer c_na par son défine
Regarder comme se serait long d'écrire oSource.MyArray DECLARE oSource.MyArray(ALEN(oSource.MyArray,1) + IIF(VARTYPE(oSource.MyArray(ALEN(oSource.MyArray,1),1))="L",0,1) ,n_column)
Ben j'ai mieux l'écrire une seule fois et lasser le préprocesseur de fox faire le reste pour moi
#endif&& fin des commentaires
* Passons au deux dernières * IncArray(@MyArray) et oIncArray(oSource,"MyArray")
* C'est tout et bonne soirée, bonne nuit. Quoi. Pour les fraicais biensûre et excusé mon français y * fait pitié je le sais. Mais bon c'est pas de français mais la la programation qu'il est question ici.