DEFI N°1 - Indirection sur un tableau de structure
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Indirection sur un tableau de structure(ne pas confondre avec une table)

Pour ceux qui ne connaissent pas les indirectionsvoici un article trés bien rédigé disponible sur wdforge.

Extrait :
Citation :
L’indirection est particulièrement utile pour concevoir des fonctions qui manipuleront des variables sans être obligé d’en avoir le nom précis. Cette notion doit être prise en compte dans la conception des nom des variables pour une facilité accrue de programmation.


Le défi
- Comment faire une indirection sur un tableau de structure (dynamique ou non) ?
a) en connaissant le contenu de la structure.
b) en ne connaissant pas le contenu de la structure.

Déclaration :
//Une Structure
Categ est une structure
	IdCateg est un entier
	LibCateg est une chaîne
FIN
//Un Tableau Dynamique
TabCateg est un tableau dynamique
TabCateg=allouer un tableau de 0 SCateg


Element1,NomTable est une chaîne
Element1="IdCateg"
NomTable="TabCateg"


Différent essais infuctueux
//Je redimensionne mon tableau.
Dimension({NomTable},1) //Ca fonctionne

//j'affecte une valeur de test 
TabCateg[1]:IdCateg=10


//je veux affecter une valeur différente à mon tableau
//Impossible d'acceder au information par indirection :
{NomTable}[1]: + Element1 = 2             //Erreur Avant Compilation
{NomTable}[1]:{Element1} = 2              //Erreur Avant Compilation
{NomTable}[1]{":" + Element1} = 2         //Erreur Avant Compilation
{NomTable}[1][1]=2                        //Le tableau possède 1 dimension(s) et vous tentez d'accéder à 2 dimension(s).


//on regarde le resultat 
Info(TabCateg[1]:IdCateg)


Bon courage :)

Contribution le : 11/02/2005 09:51
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Tu pousse le bouchon un peu trop loin maurice

je veux bien comprendre l'utilisation de l'indirection sur le nom du tableau qui peut varier en fonction des besoins.
Maintenant de la a vouloir mettre l'indirection sur les membres d'une structure qui elle ne change pas, je ne vois pas bien l'utilité si ce n'est à chercher à pousser les limites à l'extrême.
Ou alors dites moi avec quel languages vous arrivé à faire cela?

Ceci dit il y a toujours moyen de trouver une solution via la compilation dynamique.
A des fins didactique, je vous offre le code:

Element1,NomTable est une chaîne
Element1="IdCateg"
NomTable="TabCateg"

sResultat est une chaîne 
sResultatCompile est une chaîne 
sSource est une chaîne
sSource  = "//Une Structure" + RC
sSource += "Categ est une structure" + RC
sSource += " IdCateg est un entier" + RC
sSource += " LibCateg est une chaîne" + RC
sSource += "FIN" + RC + RC
sSource += "//Un Tableau Dynamique" + RC
sSource += "TabCateg est un tableau dynamique" + RC
sSource += "TabCateg=allouer un tableau de 0 Categ"+RC + RC
sSource += "Element1,NomTable est une chaîne" + RC
sSource += "Element1=""IdCateg""" + RC
sSource += "NomTable=""TabCateg""" + RC + RC
sSource += "//Je redimensionne mon tableau." + RC
sSource += "Dimension({NomTable},1) //Ca fonctionne" + RC + RC
sSource += "//j'affecte une valeur de test" + RC
sSource += "TabCateg[1]:IdCateg=10" + RC
sSource += "//on regarde le resultat" + RC
sSource += "Info(""Nouvelle Valeur affectée à TabCateg[1]:IdCateg : "" +TabCateg[1]:IdCateg)" + RC + RC
sSource +=  NomTable + "[1]:" + Element1 + "=2" + RC
sSource += "RENVOYER (TabCateg[1]:IdCateg)"

sResultatCompile = Compile ("Proc_dynamique", sSource)
SELON sResultatCompile
	CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure )
	CAS "ERR" : sResultat = "Compilation impossible. "+ RC +ErreurInfo()
	AUTRE CAS : sResultat = sResultatCompile
FIN
Info("TabCateg[1]:IdCateg = " + sResultat)

Vous pouvez tester cela fonctionne.

Contribution le : 11/02/2005 12:45
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Anonyme
Moi j'adore ca :)

Non cela vient d'un besoin précis, le but etant de créer une fonction pour automatiser le remplissage d'un tableau.

On a une structure dans une fenetre (qui poura etre differente selon les fenetres)

On a une fonction globale de remplissage de tableau à partir d'une table dynamique.

Si je veux que ma fonction marche pour tout type de structure il faut bien faire de l'indirection, des fonctions globales comme ca j'en ai quelque unes. (faire une requete,remplir une combo, mais si je veux que ca marche pour une table il me faut plus de paramètre).


Je n'ai absolument pas penser a la compilation dynamique c'est un peu de la triche :), est ce que la compilation dynamique ne risque pas de ralentir mon applicaiton ?, a mon avis oui.


Contribution le : 11/02/2005 15:07
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure

Inscrit:
19/11/2002 12:20
Post(s): 390
Il ne faut pas se voiler la face, les indirections ralentissent également le process, même en indiquant le type d'indirection, genre:
toto="saisie1"
{toto,indchamp}="charlie"

Contribution le : 11/02/2005 15:33
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Petit Test de Vitesse :
Soit deux procedures :
PROCEDURE RemplirComboIndirection(NomCombo,Rocket,IdRocket,LibRocket)
ReqCombo est une Source de Données
ListeSupprimeTout(NomCombo)
ReqCombo=Req(Rocket,ReqCombo)
HLitPremier(ReqCombo)
TANTQUE PAS HEnDehors
		ListeInsère(NomCombo,{"ReqCombo." + LibRocket} + gLien({"ReqCombo." + IdRocket}))
	HLitSuivant(ReqCombo)
FIN

PROCEDURE RemplirComboSansIndirection(Rocket)
ReqCombo est une Source de Données
ListeSupprimeTout(Combo1)
ReqCombo=Req(Rocket,ReqCombo)
HLitPremier(ReqCombo)
TANTQUE PAS HEnDehors
	ListeInsère(Combo1,ReqCombo.nom + gLien(ReqCombo.idsalarie))
	HLitSuivant(ReqCombo)
FIN



ces deux procedures font la meme chose remplir une combo a partir d'une requete, sauf que l'une a des indirections, l'autre nom.

sur une table mysql de 200 lignes :
Procedure 1 ____ 12 ms
Procedure 2 ____ 12 ms

sur une autre table de 23000 lignes :
Procedure 1 ____ 1804 ms
Procedure 2 ____ 2224 ms


Alors evidement les indirections sont un peu plus lentes, mais ca ne se voit pas sur tres peu d'appel.
Je vais pas m'amuser à afficher 23 000 ligne dans une combo, ni meme 200

Contribution le : 11/02/2005 15:55
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Citation :

est ce que la compilation dynamique ne risque pas de ralentir mon applicaiton


non, pas vraiment si ce n'est le temps de la compilation du contenu de la variable.
Pour cela il faut éviter de recompiler lorsque cela n'est pas nécessaire. en effet la procédure une fois compilé peut être exécuté dans une boucle simplement en appelant la fonction ExecuteTraitement().

Via une classe tu pourrait donner à un membre de ta classe le nom du type de tableau qui à été compilé ainsi en passant en paramètre ce nom la classe saurait si il faut recompiler ou pas la fonction.
Si le nom passé en paramètre differe de celui stocké dans le membre alors recompilation


Contribution le : 11/02/2005 16:48
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Utilisateur WDF
Inscrit:
22/02/2005 21:13
Post(s): 59
Excusez ma question hors sujet mais comment vous faites pour "chronométrer" le temps que mettent vos procédure à se s'éxécuter ?


Contribution le : 03/03/2005 18:38
Créer un fichier PDF de la contribution Imprimer


Re: DEFI N°1 - Indirection sur un tableau de structure
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Voir : Analyseur de performances
dans l'aide de windev

Les fonctions :
- AnalyseurDébut
- AnalyseurFin


Contribution le : 03/03/2005 22:33
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2