Fonction recursive, Help

Fonction recursive, Help - VB/VBA/VBS - Programmation

Marsh Posté le 22-05-2007 à 15:47:19    

Salut,

 

encore moi. je dois modifier une fonction recursive, mais la je galeres (j ai jamais aimé la recursivité)

 


en gros,  voila la fonction :

 
Code :
  1. Private Function GetSubMembers(GroupObject, CurrentISAPath)
  2.     Dim TmpMember ' as IADs
  3.     For Each TmpMember In GroupObject.Members
  4.        
  5.         If LCase(TmpMember.Class) = "group" Then
  6.             'Status
  7.                If DebugMode = TRUE Then Call Message ("Found group: '" & TmpMember.ADsPath & "'" & chr(10) & chr(13) & "   in group: '" & GroupObject.ADsPath & "'. Analysing..." )
  8.             Call GetSubMembers(TmpMember, CurrentISAPath)
  9.         Else
  10.             AddEntry CurrentISAPath, TmpMember.ADsPath, GroupObject.ADsPath
  11.         End If
  12.     Next
  13. End Function 'GetSubMembers(GroupObject, CurrentISAPath)

elle marche bien

 

Mon probleme c est que des fois, j ai GroupeObject qui pointe vers le group (appelons le:) "Toto"

 

Le groupe "Toto" contient le group "Tata"
Le groupe "Tata" contient le group "Toto"

 

Et la c est le drame, ca sort jamais.
J'ai essayé de mettre le nom du groupe dans un Dictionnary et tester avant le "Call GetSubMembers" de savoir si ce groupe avaitr deja été testé,.. mais ca marche pas, je dois mal m'y prendre...

 

si quelqu un a une idee ?

 

Merci d'avance

 

Reply

Marsh Posté le 22-05-2007 à 15:47:19   

Reply

Marsh Posté le 22-05-2007 à 23:20:05    

si toto contient tata et vice versa, tu dois pas faire du récursive c'est tout ;)

Reply

Marsh Posté le 23-05-2007 à 08:38:33    

Ou alors tu testes que chaque groupe n'a pa déjà été traité avant d'appeler en récursif.

Reply

Marsh Posté le 23-05-2007 à 11:13:54    

jpcheck a écrit :

si toto contient tata et vice versa, tu dois pas faire du récursive c'est tout  ;)


Que Toto contient Tata, c est normal, le probleme c est quand Tata contient Toto, et ca, je vois pas comment le savoir quand je suis dans cette fonction.

Reply

Marsh Posté le 23-05-2007 à 11:23:48    

Paul Hood a écrit :

Ou alors tu testes que chaque groupe n'a pa déjà été traité avant d'appeler en récursif.


Oui, c est ce que je voulais faire,, un truc du genre :

Code :
  1. Dim Catalogue
  2. set Catalogue =CreateObject (scripting.Dictionary)
  3. Private Function GetSubMembers(GroupObject, CurrentISAPath)
  4.     Dim TmpMember ' as IADs
  5.     Dim groupe_Name
  6.     For Each TmpMember In GroupObject.Members
  7.         If LCase(TmpMember.Class) = "group" Then
  8.           groupe_Name = 'Le nom NetBios du groupe que je detaille pas ici 
  9.             if NOT Catalogue.exist(groupe_Name) then
  10.             'Status
  11.             If DebugMode = TRUE Then Call Message ("Found group: '" & TmpMember.ADsPath & "'" & chr(10) & chr(13) & "   in group: '" & GroupObject.ADsPath & "'. Analysing..." )
  12.             Call GetSubMembers(TmpMember, CurrentISAPath)
  13.               Catalogue.add groupe_Name, 1
  14.             end if
  15.         Else
  16.             AddEntry CurrentISAPath, TmpMember.ADsPath, GroupObject.ADsPath
  17.         End If
  18.     Next
  19. End Function 'GetSubMembers(GroupObject, CurrentISAPath)


mais je comprend pas pourquoi, ca marche pas ...

Reply

Marsh Posté le 23-05-2007 à 11:26:25    

il faut mettre ton flag "deja traité" avantr de lancer de nouveau la fonction, sinon tu reste bloqué dans la boucle...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed