Procédure : Renvoyer plusieurs valeurs ?
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Bonjour à tous,

Je veux créer une procédure globale qui effectue plusieurs calculs à partir des paramètres envoyés.
Ex : pProcedureCalculs(param1,param2,param3,param4)

Jusque là, pas de problèmes.
Mais je souhaite que cette procédure me renvoie plusieurs résultats différents calculés à partir de mes paramètres.
Ex : Res1, Res2, Res3

J'ai pensé à envoyer à la procédure un cinquième paramètre pour lui indiquer quel résultat je veux :
   pProcedureCalculs(param1,param2,param3,param4,TypeRes)
et à mettre en fin de procédure :
    SELON TypeRes
	CAS 1 : TypeRes = 1
		Renvoyer Res1
	CAS 2 : TypeRes = 2
		Renvoyer Res2
	CAS 3 : TypeRes = 3
		Renvoyer Res3    
    FIN
Mais cela m'oblige à lancer 3 fois de suite ma procédure en changeant uniquement le dernier paramètre, et à re-exécuter 3 fois mes calculs avec les mêmes valeurs.

Quelqu'un aurait-il une solution plus simple ?

Merci d'avance.

Contribution le : 29/07/2004 17:36
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?

Inscrit:
18/12/2003 13:14
Post(s): 212
Bonjour
Peux tu expliquer davantage, est ce que ta procedure fais plusieurs calculs en même temps et donc on obtient plusieurs résultats, ou un seul calcul sur PARAM1, PARAM2...etc ..


Contribution le : 29/07/2004 19:26
_________________
Bonne Chance.
M'envoyer un message......
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
En fait, je fais un calcul de durée entre 2 dates (+ 2 heures) et je voulais faire une présentation texte différente pour ce même calcul (que je lance à chaque modification de l'un ou l'autre des 4 champs).

Donc, j'ai un résultat en "durée" pour stocker dans la rubrique du fichier HF (champ invisible dans ma fenêtre), plus une valeur "texte" calculée différemment selon le résultat.
Par exemple, si j'ai des jours, j'affiche :
"X jours XX heures XX minutes"
mais si je n'ai que des heures, j'affiche :
"X heures XX minutes"
et si je n'ai que des minutes, j'affiche :
"XX minutes"

car en utilisant un masque prédéfini, j'ai toujours le mot "jour" ou "heures" même s'il n'y en a pas dans mon résultat.
Mais j'ai formulé ma question d'une manière générique, car c'est une question que je me suis déjà posée plusieurs fois et je n'ai pas trouvé d'explications dans l'aide.

PS : je suis novice en Windev (et en programmation...)
Merci de ta patience.

Contribution le : 29/07/2004 19:57
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Voici une petite procédure qui renvoi la valeur de la différence entre deux dates sous format texte
JJJJJJJHHMMSSCC et quipeut être enregistrée directement dans un fichier Hyper File au format Texte de 16 caractères.
J = Jours
H = Heures
M = Minutes
S = Secomdes
C = Centiemes de seconde

le paramètre pDiffTexte permet de stocké la valeur sous forme de texte en clair la différences entre les deux dates
Soit
- X jours X heures X minutes
- X HeuresX minutes
- X minutes

PROCEDURE DiffToJoursHeuresMinutes(pDateHeureTxt1,pDateHeureTxt2,pDiffTexte)
//Format pDateHeureTxt : AAAAMMJJHHmm ou AAAAMMJJHHmmss ou AAAAMMJJHHmmsscc
sDiff est une chaîne
sBuff est une chaîne
nValeur est un entier

pDiffTexte=""
sDiff=DateHeureDifférence(pDateHeureTxt1,pDateHeureTxt2)
nValeur = Val(Gauche(sDiff, 8))
SI nValeur > 0 ALORS sBuff +=  nValeur + " Jours "
nValeur = Val(Milieu(sDiff, 9, 2))
SI nValeur > 0 ALORS sBuff += nValeur + " heures "
nValeur = Val(Milieu(sDiff, 11, 2))
SI nValeur >0 ALORS sBuff += nValeur + " minutes"
pDiffTexte = sBuff
RENVOYER sDiff


Cette procedure peut bien sur être améliorée.

Contribution le : 30/07/2004 01:19
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Stagiaire WDF
Inscrit:
23/07/2004 10:24
De St Ouen
Post(s): 38
Le plus simple pour qu'une fonction renvois plusieurs paramètres de types différents est encore de créer une structure dans laquelle on encapsule les données souhaité :
// à mettre dans les déglarations globales de ta fenêtre
// ou du projet suivant ou se trouve ta fonction.
RetourFonction est une structure
   monRes1 est un ...
   monRes2 est un ...
   MonRes3 est un ...
fin

// dans ta fonction :

resu est un RetourFonction
//traitements
resu:monRes1 = ...
resu:monRes2 = ...
resu:monRes3 = ...
renvoyer resu

// dans le code d'appel à la fonction

sboub est un RetourFonction
sboub = maFonction(param1,...etc)
champdate1 = sboub:monRes1


Voila c'est une méthode pas trop bourrine pour passer plusieur paramètres en retour qui en vaut une autre.
tape structure dans l'aide windev si tu capte pas bien ma méthode, c'est bien expliqué.

Remarque aussi que si touts les membres de ta structure sont du même type tu peut aussi utiliser un tableau fixe qui sera peut être plus facile à comprendre si tu débute.

BenJ

Contribution le : 30/07/2004 09:35
_________________
......
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
DSI WDF
Inscrit:
06/04/2004 12:07
Post(s): 337
Et tu ne peux pas tout simplement renvoyer un tableau ( je sais pas si ça marche, pas testé ) mais bon, tu te fait un tableau de 1*3 et lira simplement comme ça :

RENOYER monTab ( il y à sûrement moyen de renvoyer un objet par reference dans windev )

monTab.valeur1[1]
monTab.valeur2[1]
monTab.valeur3[1]

Bon, aprés c'est peut être naîf comme vision des choses, mais avant de donner dans le tordu, j'essayerai ça si j'était moi

Contribution le : 30/07/2004 11:39
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Bonjour et merci à tous pour vos réponses.

Je pense que dans un premier temps, je vais essayer la solution de DrCharly, mais les autres idées sont intéressantes et vont surtout me permettre de me plonger sur les concepts de tableau et de structure que je n'ai pas encore abordés, car je n'en voyais pas directement l'application (et surtout, j'avance petit à petit...).

Ce forum est décidément très sympa et les exemples ainsi donnés permettent mieux de comprendre que des morceaux d'aide forcément toujours trop succincts (et pourtant j'y fait appel autant que possible).

Encore merci.

Contribution le : 30/07/2004 17:12
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Utilisateur WDF
Inscrit:
03/06/2004 14:31
De Bourgoin Jallieu (38)
Post(s): 52
Sinon tu peux ajouter des paramétres à ta procédure, si tu dois renvoyer 3 valeurs tu ajoute trois paramétres à ta procédure. Vois l'expemple:

Ret1, Ret2, Ret3 sont des entiers
//appel de la procedure
Proc_Toto(2,5,Ret1,Ret2,Ret3)


//Procédure :
Proc_Toto(Val1, Val2, Ret1, Ret2, Ret3)
{
Ret1 = Val1 + Val2
Ret2 = Val1 - Val2
Ret3 = Val1 * Val3
}

Et voila elle ne renvoi rien mais à la sortie de la procédure, les variables Ret seront bien renseignées. Car windev travail toujours en reférence comme Java (enfin presque...)

Contribution le : 03/08/2004 17:47
Créer un fichier PDF de la contribution Imprimer


Re: Procédure : Renvoyer plusieurs valeurs ?
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Merci,

C'est une super idée.

J'avais bien plus ou moins aperçu ce principe, que je n'avais pas tout à fait compris les explications de l'aide.

Rien ne vaut un bon exemple, décidément...

Contribution le : 03/08/2004 22:17
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