[ASTUCE] Sous-catégories infinies

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

[ASTUCE] Sous-catégories infinies

Message par microdevweb »

Bonjour à tous,

Je vous propose une petite astuce pour concevoir un code qui permet pour l'exemple de créer des catégories qui peuvent avoir des sous-catégories qui peuvent elle-même avoir des sous-catégories qui peuvent elle-même avoir des sous-catégories qui peuvent elle-même avoir des sous-catégories qui peuvent elle-même avoir des sous-catégories ...

:roll: Houla je m'arête la

Pour implémenter cela il faut savoir deux choses importantes
  • Une structure peut contenir sa propre structure
  • Une procédure peut s'appeler elle-même
Et voici le code qui n'est pas très compliqué

Code : Tout sélectionner

Structure CATEGORIE
  nom.s
  List mesCategorie.CATEGORIE()
EndStructure
Global NewList mesCategorie.CATEGORIE()
Procedure AjouteCategorie(Nom.s,*categorie_Mere.CATEGORIE=0)
  ; Si une catégorie mère est renseignée
  If *categorie_Mere
    AddElement(*categorie_Mere\mesCategorie())
    *categorie_Mere\mesCategorie()\nom=nom
    ProcedureReturn *categorie_Mere\mesCategorie()
  Else
    AddElement(mesCategorie())
    mesCategorie()\nom=Nom
    ProcedureReturn mesCategorie()
  EndIf
EndProcedure
Procedure LitCategories(List cat.CATEGORIE())
  ForEach cat()
    Debug cat()\nom
    ForEach cat()\mesCategorie()
      LitCategories(cat()\mesCategorie())
    Next
  Next
EndProcedure

; Ajout de quelque catégories
Define *cat=AjouteCategorie("Catégorie A")
AjouteCategorie("  sous-Catégorie de A A1",*cat)
AjouteCategorie("  sous-Catégorie de A A2",*cat)
*cat=AjouteCategorie("Catégorie B")
AjouteCategorie("  sous-catégorie B BA",*cat)
*cat=AjouteCategorie("  sous-catégorie B BB",*cat)
AjouteCategorie("    sous-catégorie de la sous-categorie BB  BBA",*cat)
AjouteCategorie("    sous-catégorie de la sous-categorie BB  BBB",*cat)
AjouteCategorie("Catégorie C")
LitCategories(mesCategorie())
Voilà j'espère que cela vous aura appris quelque chose qui pourra vous être utile.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [ASTUCE] Sous-catégories infinies

Message par falsam »

je ne pensais pas que c'était possible d'imbriquer une structure de cette manière. Merci pour cette astuce.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: [ASTUCE] Sous-catégories infinies

Message par Zorro »

pas de raisons que ça ne marche pas, du moment que le contexte procedure est respecté

ce qui m'etonne la dedans, c'est que ça marche avec une Liste Chainée declarée en Globale !!!!????

ça , et seulement ça devrai poser un probleme dans un contexte recursif .... 8O
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: [ASTUCE] Sous-catégories infinies

Message par GallyHC »

Merci pour cette petite astuce, cela peut être utile.

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: [ASTUCE] Sous-catégories infinies

Message par JohnJohnsonSHERMAN »

Merci de cette astuce :)

Ca me rapelle la maniére de créer une liste chainée en C :) Je ne savais pas qu'on pouvait faire ca en PB... j'aurais mis des pointeurs ^^
Aprés tout une liste chainée l'est grâce à des pointeurs donc.... ;)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre