Imaginer que vous désirez faire une liste récursive. Je m'explique, lord du parcours d'une liste vous voulez ajouter un ou des éléments à la liste et les traité dans la même boucle.
Si vous utilisé classiquement ForEach cela ne fonctionnera pas.
Global nbListe=100
Global NewList teste.i()
; Exemple de lecture de liste dynamique
; j'ajoute un item à la liste pour pouvoir démarer
AddElement(teste())
teste()=1
ResetList(teste()) ; réinitialise la liste
Global Nb=ListSize(teste()) ; Nombre d'élément à la liste
; Avec une boucle Foreach je ne lirais que un élément
For N=1 To Nb
SelectElement(dataPrj::myPrj\myFile(),N-1) ; j'avance dans la liste
Debug "VALUES: "+Str(teste()) ; La valeur de l'ément ajouté avant
If N<nbListe
; ICI j'ajoute un élément (pour l'exemple)
AddElement(teste())
teste()=N+1 ; une valeur quelconque pour le teste
Nb=ListSize(teste()); Je change le nombre d'élement ainsi mon nouvelle élement poura être traité dans la boucle
EndIf
Next
; Teste le résultat
; ForEach teste()
; Debug Str(teste())
; Next
Pour un parcours de ce style il faut utiliser PushListPosition() et PopListPosition()
- PushListPosition() permet de mémoriser la position du pointeur de parcours d'une liste avant insertion d'autres éléments par exemple.
- PopListPosition() permet de revenir à la position mémorisée et de continuer la lecture séquentielle.
Structure NewElement
id.i
tag.s
actif.i
EndStructure
Global NewList MyList.NewElement()
Procedure AddTag()
AddElement(MyList())
MyList()\id = ListIndex(MyList())
MyList()\tag = "Tag " + Str(MyList()\id)
EndProcedure
;Quelques éléments de test
For n = 0 To 9
AddTag()
Next
;Lecture séquentielle de la liste
ForEach MyList()
If MyList()\id = 9
;Mémorisation de la position courante
PushListPosition(MyList())
;Ajout de deux éléments
AddTag()
AddTag()
;Retour à la position avant insertion éléments
PopListPosition(Mylist())
EndIf
Debug Str(MyList()\id) + " " + MyList()\tag
Next
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%
Je liste les procédure d'un fichier Pb (Xinclude) en partant d'un fichier principal ex: main.pb
Donc en premier j'ajoute dans une liste le fichier principal
Dans une boucle je liste les fichier inclus, au départ un seul fichier
J'ajoute les fichier trouvé
Et comme je poursuit la liste avec les éléments ajoutés, je reprend le traitement pour chaque nouveau fichier
Bon je sais pas si c'est clair mais cela fonctionne