PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Tableau associatif de structure : ne pas avoir à tester l'existence de la clé
Tableau associatif de structure : ne pas avoir à tester l'existence de la clé
Iniciado por paul.gera, 04,nov. 2018 15:49 - 4 respuestas
Publicado el 04,noviembre 2018 - 15:49
Bonjour,

J'utilise un tableau associatif de structure.

Je souhaite savoir s'il existe une solution pour ne pas avoir à tester l'existence de la clé ?

En effet, j'obtiens l'erreur "Elément inexistant dans le tableau associatif" - et pour cause ! - alors que je souhaite récupérer "" ou Null par exemple quand je fais Info(tabAssociatif[12345]).

Est-ce possible svp ?
Miembro registrado
96 mensajes
Publicado el 05,noviembre 2018 - 09:33
Bonjour,

pourriez-vous nous préciser la version de WinDev et avez-vous utilisé le mot clé dynamique dans la déclaration de votre tableau associatif ?

Bonne journée à vous !

--
Johjo aka Jonathan Laurent

Codez mieux ! Codez plus vite !

Mon blog sur WinDev : http://www.ytreza.org
Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0
Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum
Publicado el 05,noviembre 2018 - 10:32
Bonjour,

Je suis en v23.
Je n'ai pas mis de notion de clé dynamique dans l'init.

Cordialement,

Paul
Publicado el 05,noviembre 2018 - 17:49
J'ai donc mis : tClientsListe est un tableau associatif (*,"",*) de stClient dynamique

Mais quand je fais par exemple Info(tClientsListe[123].sNomClient) pour récupérer le nom du client (pour une clé qui n'existe pas volontairement) j'ai une erreur pour élément inexistant.

Où ai-je faux ?
Miembro registrado
96 mensajes
Publicado el 05,noviembre 2018 - 20:25
Bonsoir,

le problème vient de l'utilisation d'un attribut directement depuis le tableau associatif.

Voici un exemple de code (non testé) pour corriger le problème
tClientsListe est un tableau associatif (*, Null,*) de stClient dynamique

client est un stClient dynamique = tClientsListe[123]
SI client <> Null ALORS
Info(client.sNomClient)
FIN


Ainsi, vous n'aurez plus l'erreur.

Mais pour moi, cela revient à la même chose que d'écrire le code suivant :
tClientsListe est un tableau associatif (*, Null,*) de stClient dynamique

SI tClientsListe[123]..existe ALORS
Info(tClientsListe[123].sNomClient)
FIN


En effet, vous vérifiez l'existence de la clé.

Une troisième solution serait de passer par une fonction :

tClientsListe est un tableau associatif (*, Null,*) de stClient dynamique

...

client est un stClient dynamique = lire_client_ou_défaut(123)
Info(client.sNomClient)

Procedure lire_client_ou_défaut(clé_client est entier)
client est un stClient dynamique
SI tClientsListe[clé_client]..vide ALORS
client = allouer un stClient()
SINON
client = tClientsListe[clé_client]
FIN

RENVOYER client


A vous de voir ce qui vous convient le mieux.

Bonne soirée !

--
Johjo aka Jonathan Laurent

Codez mieux ! Codez plus vite !

Mon blog sur WinDev : http://www.ytreza.org
Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0
Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum