OVH Cloud OVH Cloud

[WD10] Problème Structures / tableaux

5 réponses
Avatar
mat
Bonjour,

je cherche une solution en Windev pour les tableaux dynamiques de
Paradox ayant "une clé" et une valeur correspondante:

// en pseudo-code, il s'agit du suivant:

monChange est un tableau dynamique

maVariable est chaîne = "GBP"

monChange["USD"] = 1.25
monChange["CHF"] = 1.55
monChange[maVariable] = 0.62

//pour lire:
info(monChange[maVariable]) // affiche 0.62

Donc, ce que je cherche est une solution ou je peux déclarer une
nouvelle clé à volonté, en fait une structure simple et flexible de
stockage de données.

En dépit du fait que j'ai lu l'aide de toutes les cotés, je n'arrive pas
à comprendre si une telle chose est faisable sous Windev.

Merci de vos lumières,

Mat

5 réponses

Avatar
Albert
mat a écrit :

Bonjour,

je cherche une solution en Windev pour les tableaux dynamiques de
Paradox ayant "une clé" et une valeur correspondante:

// en pseudo-code, il s'agit du suivant:

monChange est un tableau dynamique

maVariable est chaîne = "GBP"

monChange["USD"] = 1.25
monChange["CHF"] = 1.55
monChange[maVariable] = 0.62

//pour lire:
info(monChange[maVariable]) // affiche 0.62

Donc, ce que je cherche est une solution ou je peux déclarer une
nouvelle clé à volonté, en fait une structure simple et flexible de
stockage de données.

En dépit du fait que j'ai lu l'aide de toutes les cotés, je n'arrive pas
à comprendre si une telle chose est faisable sous Windev.

Merci de vos lumières,

Mat



Bonjour,

En utilisant les Tableaux de structures

http://www.wdforge.org/modules/icontent/index.php?page6

Cordialement

Albert
Avatar
mat
Gilles Guédikian wrote:
...

Sinon les zones mémoires peuvent aussi faire l'affaire.





Merci Gilles, je suppose c'est le plus proche que je puisse venir à ce
que je cherche. Mais en fait, aussi dans ce cas, comme dans celui des
tableaux, il faut toujours passer à travers l'indice pour faire une
opération ou l'autre. Dans le cas des zones mémoire, on peut stocker les
valeurs avec une commande:
memAjoute(zmCurr,"USD", 10000), et on peut les récupérer avec une autre:
MemRecherche(sMem, "USD")
mais je ne trouve pas comment ajouter un autre montant à la valeur de
retours (p.ex. les 10000 de mon exemple + 1000) avec une seule commande.

MemModifié ne marche qu'en utilisant l'indice mais celui-ci n'est
biensûr pas connu. L'aide dit qu'on peut le récupérer en utilisant
memRecherche, mais si j'ai bien compris c'est seulement correct si le
paramêtre "Element" est sur "faux", mais dans ce cas, la recherche prend
lieu sur la valeur retourné, et pas sur la valeur "stocké". Pour rester
gentil, ça me parait peu utile.

Alors, j'ai essayé le suivant:
//créer les valeurs de la zones mémoire
memAjoute(zmCurr,"USD", 0)
memAjoute(zmCurr,"EUR", 0)
memAjoute(zmCurr,"GBP", 0)

// ajouter un montant, d'abord obtenir le solde courant
// normalement les valeurs sont représenté par une variable
monSolde = memRecherche(zmCurr, "USD")

// ensuite obtenir l'indice
monIndice = memEnCours(zmCurr)

// ensuite modifier le montant
memModifie(zmCurr, "USD", monSolde + monNouveauMontant, monIndice)

et ça marche. Donc, ce qu'on fait dans Paradox (d'il y a 15 ans et pour
DOS) sur les vrais tableaux dynamiques:
monTableau["USD"] = monTableau["USD"] + 1000
me demande trois commandes en Windev. Bon, au moins on peut (pour
l'instant) imbriquer les fonctions :

MemModifie(zmCurr, "USD", MemRecherche(zmCurr, "USD") + 1000,
MemEnCours(zmCurr))


L'aide n'est de toute façon pas une grande aide, plutôt déconcertant.
J'utilise la version anglaise et l'exemple (sûrement le même qu'en
français) me semble inverser d'abord le sens de l'élément vrai/faux en
faisant une recherche numérique avec l'élément "vrai". Ensuite, dans le
2e exemple il n'y a aucune valeur de recherche.

Je trouve ça un peu triste... surtout que ce n'est un cas isolé. Et
lorsqu'on annonce un tel problème à PC Soft on risque avoir plusieurs
mail à échanger et des réponses tel que
"Nous avons bien pris note de vos remarques. Notre précédente réponse
reste cependant valable.", ce que je suppose veut dire "on est d'accord
avec vous, mais on a pas envie de le changer", car ils n'invalidaient
pas ce que je leur ai décrit, mais donnaient un exemple sans relation au
problème décrit.

Salutations
Mat



l'aide sur memRecherche:

"""
<Résultat> : Tout type

Si le paramètre <Élément> est à Vrai (par défaut) :
Valeur du premier élément trouvé ou une chaîne vide (" ") si aucun
élément n'a été trouvé.

Si le paramètre <Élément> est à Faux :
Indice du premier élément trouvé ou -1 si aucun élément n'a été trouvé.

<Nom de la zone mémoire> : Chaîne de caractères
Nom de la zone mémoire, défini par la fonction MemCrée.

<Valeur recherchée> : Chaîne de caractères
Valeur recherchée dans la zone mémoire.

<Élément> : Booléen
Vrai (valeur par défaut) : la recherche est effectuée sur la valeur
ajoutée par la fonction MemAjoute ou sur la valeur modifiée par la
fonction MemModifie.

Faux : la recherche est effectuée sur la valeur de retour.

"""



//// EXEMPLE DE LA VERSION ANGLAISE

// Initialize a memory zone
MemCreate("MyZone")
I is int
FOR I=1 TO 10
MemAdd("MyZone","Subscript "+I,I)
END
// Search according to the added value
Result1 is int
SoughtVal is int = 9
Result1 = MemSeek("MyZone",SoughtVal,True) *
// Search according to the return value
Result2 is string
SoughtVal2 is string
Result2 = MemSeek("MyZone",SoughtVal2,False) **


* cette recherche agit sur la valeur stocké "Subscript" + I , p.ex.
Subscript1, Subscript2, etc, donc une recherche sur la valeur 9 ne
donnera rien. En plus, même s'il donnait un résultat, le type est traité
de manière aléatoire. On stocke I (entier), selon l'aide la valeur est
stocké de type chaîne (pourquoi d'ailleurs????), mais Result1 est de
type entier. Avec les conversions automatiques de Windev, pour l'instant
cela va quand-même marcher. Mais comme nous avons pu voir dans le passé,
il n'y a aucune garantie qu'une fonction non documentée restera toujours
fonctionnelle.


** cette recherche agit sur la valeur de retour "I" mais aucune valeur
de recherche n'est spécifié.


Malheureusement, j'ai déjà perdu plusieurs fois du temps pour des trucs
comme ça dans l'aide.
Avatar
mat
Albert wrote:

Bonjour,

En utilisant les Tableaux de structures

http://www.wdforge.org/modules/icontent/index.php?page6

Cordialement

Albert





merci Albert, mais ce ne marche qu'avec les indices. Je voulais quelque
chose de plus simple, mais probablement ça n'existe pas.

Salutations
Mat
Avatar
JeAn-PhI
mat vient de nous annoncer :
Bonjour,

je cherche une solution en Windev pour les tableaux dynamiques de Paradox
ayant "une clé" et une valeur correspondante:

// en pseudo-code, il s'agit du suivant:

monChange est un tableau dynamique

maVariable est chaîne = "GBP"

monChange["USD"] = 1.25
monChange["CHF"] = 1.55
monChange[maVariable] = 0.62

//pour lire:
info(monChange[maVariable]) // affiche 0.62

Donc, ce que je cherche est une solution ou je peux déclarer une nouvelle clé
à volonté, en fait une structure simple et flexible de stockage de données.

En dépit du fait que j'ai lu l'aide de toutes les cotés, je n'arrive pas à
comprendre si une telle chose est faisable sous Windev.

Merci de vos lumières,

Mat



pour avoir utilisé aussi Paradox je peux affirmer qu'un tableau
dynamique Paradox n'existe pas en WinDev il faut faire autrement à mon
grand regret d'ailleurs car les tableaux dynamique Paradox sont très
intéressant on remplace l'incide par une valeur
il faut soit passer par un tableau à 2 dimensions, soit un tableau de
structure, soit les zones mémoires mais vous ne pourrez pas échapper
aus indices des tableaux ou alors créer un champs table hors de la
fenêtre avec 2 colonnes "Indice" représantant USD, "Valeur"
représentant 1.25

--
Cordialement JeAn-PhI
Avatar
mat
JeAn-PhI wrote:

pour avoir utilisé aussi Paradox je peux affirmer qu'un tableau
dynamique Paradox n'existe pas en WinDev il faut faire autrement à mon
grand regret d'ailleurs car les tableaux dynamique Paradox sont très
intéressant on remplace l'incide par une valeur
il faut soit passer par un tableau à 2 dimensions, soit un tableau de
structure, soit les zones mémoires mais vous ne pourrez pas échapper aus
indices des tableaux ou alors créer un champs table hors de la fenêtre
avec 2 colonnes "Indice" représantant USD, "Valeur" représentant 1.25







merci pour cette confirmation. J'ai rencontré de problèmes avec les
zones mémoires que je ne m'expliquait pas et me suis orienté vers deux
tableaux et la fonction TableauCherche pour récupérer l'indice. Ca
semble bien fonctionner.

Salutations
Mat