Accueil > > > CLASSE IMBRIQUÉS EN VBSCRIPT DE DOSSIERS (APPLICABLE ASP)
CLASSE IMBRIQUÉS EN VBSCRIPT DE DOSSIERS (APPLICABLE ASP)
Information sur la source
Description
Comment accéder à tous les menbres d'une class imbriquée à elle même.
* Exemple d'appel VBScript souhaité:
uneClasse.sousClasse(5).sousClasse(2).titre = "titi"
* Permetre le type d'appel suivant:
uneSousClasseTmp = new classtype
uneClasse = new classtype
uneClasse.add(uneSousClasseTmp)
.....
.....
uneClasse.sousClasse(5).sousClasse(2).titre = "toto"
uneClasse.sousClasse(5).sousClasse(2).titre = "toto"
uneClasse.AddClass = uneSousClasseTmp
Response.Write "un sous Titre = " & uneClasse.sousClasse(2).titre & "<br>"
Response.Write "taille uneClasse.sousClasse = " & ubound(uneClasse.sousClasse)
résultat sur console:
---------------------------------------- -
Affiche tout type2 = Start
-----------------------------------------
> dir(1) --- l_name = Premier - niveau = 0
ubound(m_lstDossiers) = 4
> dir(5) --- l_name = Sous Test1 - niveau = 1
ubound(m_lstDossiers) = 0
> dir(2) --- l_name = test1 - niveau = 1
ubound(m_lstDossiers) = 0
> dir(3) --- l_name = test2 - niveau = 1
ubound(m_lstDossiers) = 0
> dir(4) --- l_name = test3 - niveau = 1
ubound(m_lstDossiers) = 1
> dir(6) --- l_name = Trois 2 - niveau = 2
ubound(m_lstDossiers) = 0
-----------------------------------------
Affiche tout type2 = FIN
-----------------------------------------
Source
- ' Source VBscript à lancer dans une console: csscript struct.vbs
- ' Adaptable en ASP
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 'on peut egalement l'améliorer en ajoutant une classe fichier en l'intégrants celle-ci comme tabeau de structur ou de class (pour y ajouter des fonctions affiche etc...), dans la classe dossiers
- 'un simple fonction resussive de parcours de dossiers locaux peut suffir, sans avoir besoin de l'intégrer dans la class
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ' - IdFolder déclaré à l'extèrieur, evite d'avoir à transmettre le dernier ID unique utilisé par la dernière la classe incluse
- ' mais il est possible de le transmettre aux classes filles pour qu'elle aient le repères à fin de créer leur identififiant unique et incémenté
- ' , à condition de prendre garde à le modifier lorsqu'on souhaite créer une aboréscence extèrieure complèe pour l'insérer ensuite dans une arboréscence existante, car elle partiraient toutes deux du même ID de'origine
-
- ' - DEPLUS, pour ASP et Script dans pages:
- ' L'ID extèrieur à la classe permet de creér plusieurs arboréscences distinctes pour les afficher
- ' dans la même pages pour qu'un javascript puisse identifier, de manière unique, les calques (DIV)
- ' qu'ils faudraient "masquer / afficher"
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Dim IdFolder
-
- class clsDossier
- ' Variables Privées et Public de la classe
- ' --------------------------------------------------- clsDossier
- private m_id
- ' - l'id permet seuleument si onsouhaite identifier des élément HTML ex <div id="folder<%=un_dossier.Id%>"><% un_dossier.Affiche %></div>
- private m_name
- private m_coupable
- private m_nbPeres
- private m_nbSousDossiers
- private m_nbFichiers
- private m_lstDossiers()
- private m_lstPeres()
- private m_trier 'Booléen qui peut passer à true si on décide de créer une fonction de trie
- private m_lstSelect
- private m_lstFichiers
- private m_cnstVide
- private m_defaut_targ
- private m_cnstTrait
-
- public lien_parent
- private m_cnst_nameFileVide
-
- Private Sub Class_Initialize
- ' --------------------------------------------------- clsDossier - INITIALIZE
- m_trier = false
- m_nbFichiers = 0
- m_nbSousDossiers = 0
- m_nbPeres = 1
- m_coupable = false
- m_cnstTrait = " "
- m_cnstVide = "<font size=1> </font>"'"Pas de fichiers dans ce dossier. "
- m_defaut_targ = "content"
- m_alt= ""
- redim m_lstDossiers(0)
- redim m_lstPeres(0)
- ' redim preserve m_lstDossiers(0)
- IdFolder = cint(IdFolder)+1
- m_id = IdFolder
- m_lstPeres(0) = IdFolder
-
- end sub
-
- Private Sub Class_Terminate
- ' --------------------------------------------------- clsDossier - TERMINATE
- ' - Destructions des Objets {dossiers et fichiers}
- dim l_indiceDossiers, l_indiceFichiers
- l_indiceDossiers = 0
- l_indiceFichiers = 0
-
- if IsArray(m_lstDossiers) then
- for l_indiceDossiers =0 to ubound(m_lstDossiers) - 1
- set m_lstDossiers(l_indiceDossiers) = nothing
- next
- end if
-
- ' - Décommanter pour verifier la destruction de tout les objets
- ' -------------------------------------------------------------
- ' wscript.echo "clsDossier ---- Class_Terminate m_id = " & m_id & vbcrlf
-
- m_nbPeres = 0
- redim preserve m_lstDossiers(0)
-
- ' - Décrémemente les ID, mais à enlever si plusieurs classe dossiers distinces sont crées dans la même page.
- IdFolder = cint(IdFolder)-1
- end sub
-
- ' *********************************************************************
- ' clsDossier - Private FUNCTION
- ' *********************************************************************
- Private Function ReplaceTest(patrn, replStr, str1)
- ' --------------------------------------------------- clsDossier - ReplaceTest(patrn, replStr, str1)
- dim i_test, str1_old
- dim l_regEx ' Create variables.
-
- i_test = 0
- Set l_regEx = New RegExp ' Create regular expression.
- l_regEx.Global = false ' Set pattern.
- l_regEx.IgnoreCase = True ' Make case insensitive.
- l_regEx.Pattern = patrn ' Set pattern.
- while l_regEx.Test(str1)
- str1= l_regEx.Replace(str1, replStr) ' Make replacement.
- i_test = i_test + 1
- wend
- set l_regEx = nothing
- ReplaceTest = str1
- end Function
-
- ' Public Function TrieTabHTML(byref inTab) - Utilisisée dans AfficheFichiers()
-
- Private sub TrierDossiers
- ' --------------------------------------------------- clsDossier - ReplaceTest3(patrn, replStr, byval str1)
- dim l_DossierTemp
- dim l_n_dossierI, l_n_dossierJ
- dim l_I_limit, l_J_limit
- dim l_i
- dim l_j
- l_i=0
- l_j = 0
-
- ' ne pas instancier l_DossierTemp avec un "new", sinom les ID sont incrémentés inutillement car une nouvelle instance de class est crée
- if (UBound(m_lstDossiers)) > 0 then
- for l_i=0 to UBound(m_lstDossiers)-1
- for l_j=0 to UBound(m_lstDossiers)-1
- if (l_i<>l_j) and (l_i > l_j) and(StrComp(ReplaceTest("(<.+>)+(.+)","$2" ,l_n_dossierI),ReplaceTest("(<.+>)+(.+)","$2" , l_n_dossierJ), vbTextCompare) = -1) then
- set l_DossierTemp = m_lstDossiers(l_i)
- set m_lstDossiers(l_i) = m_lstDossiers(l_j)
- set m_lstDossiers(l_j) = l_DossierTemp
- set l_DossierTemp = nothing
- end if
- next
- next
- end if
- m_trier = true
- end sub
-
- Private sub TrierDossiersParID
- ' --------------------------------------------------- clsDossier - ReplaceTest3(patrn, replStr, byval str1)
- dim l_DossierTemp
- dim l_n_dossierI, l_n_dossierJ, l_i, l_j
- dim l_I_limit, l_J_limit
- ' redim m_lstSelect(0)
- l_i=0
- l_j=0
- if (UBound(m_lstDossiers)) > 0 then
- ' FONCTIONNE MAIS INCREMENTE INUTILLEMT (Début)°
- ' set l_DossierTemp = new clsDossier
-
- for l_i=0 to UBound(m_lstDossiers)-1
- for l_j=0 to UBound(m_lstDossiers)-1
- l_n_dossierI =m_lstDossiers(i).ID
- l_n_dossierJ = m_lstDossiers(J).ID
-
- ' if (i<>j) and (StrComp(l_n_dossierI, l_n_dossierJ, vbTextCompare) = -1) then ' = <
- if (l_i<>l_j) and(l_i > l_j) then
- ' l_nameI = ltrim(rtrim(ReplaceTest2("(.*)[<+.+>+]*(.*)", "$1$3", l_nameI )))
- ' l_nameJ = ltrim(rtrim(ReplaceTest2("(.*)[<+.+>+]*(.*)", "$1$3", l_nameJ )))
- set l_DossierTemp = m_lstDossiers(i)
- set m_lstDossiers(i) = m_lstDossiers(j)
- set m_lstDossiers(j) = l_DossierTemp
- set l_DossierTemp = nothing
- end if
- next
- next
- ' FONCTIONNE MAIS INCREMENTE INUTILLEMT (Fin)°
- ' set l_DossierTemp = nothing
- end if
- end sub
-
- ' *********************************************************************
- ' clsDossier - Property LET
- ' *********************************************************************
- Public Property Let AddDossier(p_SousDossier)
- ' --------------------------------------------------- clsDossier - LET - AddDossier(unSousDossier)
- dim i
- redim Preserve m_lstDossiers(m_nbSousDossiers+1)
- 'MODIF set m_lstDossiers(m_nbSousDossiers) = new clsDossier
-
- set m_lstDossiers(m_nbSousDossiers) = p_SousDossier
-
- for i = 0 to (ubound(m_lstPeres)-1)
- m_lstDossiers(m_nbSousDossiers).AddPere = m_lstPeres(i)
- next
- ' m_lstDossiers(m_nbSousDossiers).AddPere2 m_lstPeres, m_id
-
-
- ' le trie doit être fait seulement, avant l'affichage, pour que membres de la classe restent accéssible le temps du remplisage des classes imbriquées
- ' si une fonction extérieur décide d'améliorer les titre des dossiers, elle doit pour les retrouvé sans faire une fonction ID ou de recherche par le nom qui peut se retrouver plusieurs fois dans les dossiers
- if i>0 then
- m_trier = false
- end if
-
- m_nbSousDossiers = m_nbSousDossiers + 1
- end Property
-
- ' ---------------------------------------------------
- Public Property Let AddPere(unPere)
- ' --------------------------------------------------- clsDossier - LET - AddPere desc = Rempli le tableau des dossiers assendant pour evité un affichage infinit
- dim y
- y=0
-
- redim Preserve m_lstPeres(m_nbPeres +1)
- m_lstPeres(m_nbPeres) = unPere
- ' -------------------------------------------------------
- ' - Quand j'ajoute un pere , je l'ajoute aux sous doddsseir
- ' -------------------------------------------------------
- ' for x =0 to ubound(m_lstDossiers) - 1
- MsgBox "m_nbPeres 412 = " & m_nbPeres
- for y=0 to ubound(m_lstDossiers) - 1
- m_lstDossiers(y).AddPere = unPere
- ' MsgBox "y = " & y
- next
- m_nbPeres = m_nbPeres + 1
- end property
-
- ' ---------------------------------------------------
- Public Property Let Name(strName)
- ' --------------------------------------------------- clsDossier - LET - Name
- ' strName = Replace(strName, chr(34), " ")
- m_name = strName
- end Property
-
- ' ---------------------------------------------------
- Property Let ID(unID) ' ne doit pas être utilisé hors de la classe car il ajouterait un nouvel id et ne remplacerait pas le précédant
- ' --------------------------------------------------- clsDossier - LET - Name
- dim x,y, l_IDold
-
- l_IDold = m_id
- m_id = unID
- ' Boucle qui mets à jours les dossiers fils lorsqu'un dossier contient déjà des sous dossiers
- for y =0 to ubound(m_lstDossiers) - 1
- for x = 0 to ubound(m_lstPeres) -1
- m_lstDossiers(y).AddPere = m_lstPeres(x)
- next
- next
- end Property
-
- ' *********************************************************************
- ' clsDossier - Property GET
- ' *********************************************************************
- Property Get ID()
- ID = m_id
- end Property
-
- Public Property Get GetSousDossiers()
- ' --------------------------------------------------- PROPERTY - GET - GetSousDossiers
- GetSousDossiers = m_lstDossiers
- end property
-
- Public Property get GetSousDossier(indice_g2)
- ' --------------------------------------------------- PROPERTY - GET - GetSousDossier
- if (indice_g2 <= UBound(m_lstDossiers)-1) then
- set GetSousDossier = m_lstDossiers(indice_g2)
- ' set GetSousDossierLast = m_lstDossiers(ubound(m_lstDossiers)-1)
- else
- MsgBox "Ajouter un sous dossier avant - GetSousDossier('" & indice_g2 & "')"
- set GetSousDossier= nothing
- end if
- ' TrierDossiers
- End property
-
- '### NOUVEAU
- Public Property get GetSousDossierLast()
- ' --------------------------------------------------- PROPERTY - GET - GetSousDossier
- if (UBound(m_lstDossiers)>0) then
-
- set GetSousDossierLast = m_lstDossiers(ubound(m_lstDossiers)-1)
- else
- msgbox("Ajouter un sous dossier avant - GetSousDossierLast(" & ubound(m_lstDossiers)-1 & ")" & vbcrlf _
- & "UBound(m_lstDossiers)-1 = " & UBound(m_lstDossiers)-1)
- set GetSousDossierLast= nothing
- end if
- ' TrierDossiers
- End property
-
- Public Property Get Name()
- ' --------------------------------------------------- PROPERTY - GET - Name
- Name = m_name
- end Property
- ' *********************************************************************
- ' clsDossier - Public Function
- ' *********************************************************************
- public Function Affiche()
- ' ------------------------------------------------------------------------------------ clsDossier -
- dim tempSousDossier
- dim l_isd
- dim l_trait
-
- l_isd = 0
-
- wscript.echo " dir(" & m_id & ") --- l_name = " & m_name
- wscript.echo "ubound(m_lstDossiers) = " & ubound(m_lstDossiers)
-
- if IsArray(m_lstDossiers) then
- TrierDossiers
- for l_isd=0 to ubound(m_lstDossiers)-1
- m_lstDossiers(l_isd).Affiche
- next
- ' l_isd = l_isd + 1
- end if
- end function
-
- public Function Affiche2(p_niveau) 'transmet les niveaux
- ' ------------------------------------------------------------------------------------ clsDossier -
- dim tempSousDossier
- dim l_isd
- dim l_trait
- dim compt
-
- compt = 0
- l_isd = 0
- for compt = 0 to p_niveau
- l_trait = l_trait & m_cnstTrait
- next
-
- wscript.echo l_trait & "> dir(" & m_id & ") --- l_name = " & m_name & " - niveau = " & p_niveau
- wscript.echo l_trait & " ubound(m_lstDossiers) = " & ubound(m_lstDossiers) & "" & vbCrLf
-
- if IsArray(m_lstDossiers) then
- TrierDossiers
- p_niveau = p_niveau+1
-
- for l_isd=0 to ubound(m_lstDossiers)-1
- m_lstDossiers(l_isd).Affiche2 p_niveau
- p_niveau = p_niveau -1
- next
- ' l_isd = l_isd + 1
- end if
- end function
-
- ' Crétion d'un dossier inclu rapides en une ligne sans avoir à renseigner toute la classe
- ' -----------------------------------------------------------------------------------
- Public function AddDossierTarget(p_name, p_chemin,p_target)
- ' -----------------------------------------------------------------------------------
- dim l_tmpDossier
- dim l_i
- set l_tmpDossier = new clsDossier
- with l_tmpDossier
- .Name = p_name
-
- end with
- redim Preserve m_lstDossiers(m_nbSousDossiers + 1)
- set m_lstDossiers(m_nbSousDossiers) = l_tmpDossier
- m_lstDossiers(m_nbSousDossiers).AddPere = m_id
- for l_i = 0 to ubound(m_lstPeres) -1
- m_lstDossiers(m_nbSousDossiers).AddPere = m_lstPeres(l_i)
- next
- set l_tmpDossier = nothing
- m_nbSousDossiers = m_nbSousDossiers + 1
- AddDossierTarget = m_nbSousDossiers-1
- End function
- end class
-
-
- ' - Sript d'éxemple d'utilisation de la classe: clsDossiers
- '---------------------------------------------------------------------
- dim unDossierTeste, unDossierTeste1, unDossierTeste2, unDossierTeste3
-
- IdFolder = 0
- set unDossierTeste = new clsDossier
- set unDossierTeste1 = new clsDossier
- set unDossierTeste2 = new clsDossier
- set unDossierTeste3 = new clsDossier
-
- unDossierTeste.Name = "Premier"
-
-
- unDossierTeste1.Name = "test1"
- unDossierTeste2.Name = "test2"
- unDossierTeste3.Name = "test3"
-
-
- unDossierTeste.AddDossierTarget "Sous Test1", "c:\", "_sefl"
- unDossierTeste.AddDossier = unDossierTeste1
- unDossierTeste.AddDossier = unDossierTeste2
- unDossierTeste.AddDossier= unDossierTeste3
-
- ' Attention, si unDossierTeste3 s'ajoute à unDossierTeste3 sans qye le premier soit passer à nothing, on obtient un boucle infinit dans l'affichage car les deux variable pointent au même endroit
- ' il faut donc le réinitilister pour eviter une boucle infinit d'appel pointant à la m^m adresse.
- set unDossierTeste1 = nothing
- set unDossierTeste2 = nothing
- set unDossierTeste3 = nothing
-
- set unDossierTeste3 = new clsDossier
- unDossierTeste3.Name = "Trois 2"
- unDossierTeste.GetSousDossierLast.AddDossier = unDossierTeste3
-
- wscript.echo "unDossierTeste.Name = " & unDossierTeste.Name & vbCrLf _
- & "-----------------------------------------" & vbcrlf _
- & "ubound(unDossierTeste.GetSousDossiers) = " & ubound(unDossierTeste.GetSousDossiers) & vbcrlf _
- & "ubound(unDossierTeste.GetSousDossierLast.GetSousDossiers) = " & ubound(unDossierTeste.GetSousDossierLast.GetSousDossiers) & vbcrlf _
- & "-----------------------------------------" & vbcrlf & vbcrlf _
- & "unDossierTeste.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.Name & vbCrLf _
- & "-----------------------------------------" & vbcrlf _
- & "unDossierTeste.GetSousDossier(0).Name = " & unDossierTeste.GetSousDossier(0).Name & vbcrlf _
- & "unDossierTeste.GetSousDossier(1).Name = " & unDossierTeste.GetSousDossier(1).Name & vbcrlf _
- & "unDossierTeste.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.Name & vbcrlf _
- & "unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name & vbcrlf
- 'unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name = "nom Changé"
- wscript.echo " nom changer = " & unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name & vbcrlf _
- & "-----------------------------------------" & vbcrlf & vbcrlf
-
- wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type1 = Start "_
- & vbCrLf & "-----------------------------------------" & vbcrlf
- unDossierTeste.Affiche
- wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type1 = FIN "_
- & vbCrLf & "-----------------------------------------" & vbcrlf
- wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type2 = Start "_
- & vbCrLf & "-----------------------------------------" & vbcrlf
- unDossierTeste.Affiche2(0)
- wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type2 = FIN "_
- & vbCrLf & "-----------------------------------------" & vbcrlf
' Source VBscript à lancer dans une console: csscript struct.vbs
' Adaptable en ASP
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'on peut egalement l'améliorer en ajoutant une classe fichier en l'intégrants celle-ci comme tabeau de structur ou de class (pour y ajouter des fonctions affiche etc...), dans la classe dossiers
'un simple fonction resussive de parcours de dossiers locaux peut suffir, sans avoir besoin de l'intégrer dans la class
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' - IdFolder déclaré à l'extèrieur, evite d'avoir à transmettre le dernier ID unique utilisé par la dernière la classe incluse
' mais il est possible de le transmettre aux classes filles pour qu'elle aient le repères à fin de créer leur identififiant unique et incémenté
' , à condition de prendre garde à le modifier lorsqu'on souhaite créer une aboréscence extèrieure complèe pour l'insérer ensuite dans une arboréscence existante, car elle partiraient toutes deux du même ID de'origine
' - DEPLUS, pour ASP et Script dans pages:
' L'ID extèrieur à la classe permet de creér plusieurs arboréscences distinctes pour les afficher
' dans la même pages pour qu'un javascript puisse identifier, de manière unique, les calques (DIV)
' qu'ils faudraient "masquer / afficher"
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim IdFolder
class clsDossier
' Variables Privées et Public de la classe
' --------------------------------------------------- clsDossier
private m_id
' - l'id permet seuleument si onsouhaite identifier des élément HTML ex <div id="folder<%=un_dossier.Id%>"><% un_dossier.Affiche %></div>
private m_name
private m_coupable
private m_nbPeres
private m_nbSousDossiers
private m_nbFichiers
private m_lstDossiers()
private m_lstPeres()
private m_trier 'Booléen qui peut passer à true si on décide de créer une fonction de trie
private m_lstSelect
private m_lstFichiers
private m_cnstVide
private m_defaut_targ
private m_cnstTrait
public lien_parent
private m_cnst_nameFileVide
Private Sub Class_Initialize
' --------------------------------------------------- clsDossier - INITIALIZE
m_trier = false
m_nbFichiers = 0
m_nbSousDossiers = 0
m_nbPeres = 1
m_coupable = false
m_cnstTrait = " "
m_cnstVide = "<font size=1> </font>"'"Pas de fichiers dans ce dossier. "
m_defaut_targ = "content"
m_alt= ""
redim m_lstDossiers(0)
redim m_lstPeres(0)
' redim preserve m_lstDossiers(0)
IdFolder = cint(IdFolder)+1
m_id = IdFolder
m_lstPeres(0) = IdFolder
end sub
Private Sub Class_Terminate
' --------------------------------------------------- clsDossier - TERMINATE
' - Destructions des Objets {dossiers et fichiers}
dim l_indiceDossiers, l_indiceFichiers
l_indiceDossiers = 0
l_indiceFichiers = 0
if IsArray(m_lstDossiers) then
for l_indiceDossiers =0 to ubound(m_lstDossiers) - 1
set m_lstDossiers(l_indiceDossiers) = nothing
next
end if
' - Décommanter pour verifier la destruction de tout les objets
' -------------------------------------------------------------
' wscript.echo "clsDossier ---- Class_Terminate m_id = " & m_id & vbcrlf
m_nbPeres = 0
redim preserve m_lstDossiers(0)
' - Décrémemente les ID, mais à enlever si plusieurs classe dossiers distinces sont crées dans la même page.
IdFolder = cint(IdFolder)-1
end sub
' *********************************************************************
' clsDossier - Private FUNCTION
' *********************************************************************
Private Function ReplaceTest(patrn, replStr, str1)
' --------------------------------------------------- clsDossier - ReplaceTest(patrn, replStr, str1)
dim i_test, str1_old
dim l_regEx ' Create variables.
i_test = 0
Set l_regEx = New RegExp ' Create regular expression.
l_regEx.Global = false ' Set pattern.
l_regEx.IgnoreCase = True ' Make case insensitive.
l_regEx.Pattern = patrn ' Set pattern.
while l_regEx.Test(str1)
str1= l_regEx.Replace(str1, replStr) ' Make replacement.
i_test = i_test + 1
wend
set l_regEx = nothing
ReplaceTest = str1
end Function
' Public Function TrieTabHTML(byref inTab) - Utilisisée dans AfficheFichiers()
Private sub TrierDossiers
' --------------------------------------------------- clsDossier - ReplaceTest3(patrn, replStr, byval str1)
dim l_DossierTemp
dim l_n_dossierI, l_n_dossierJ
dim l_I_limit, l_J_limit
dim l_i
dim l_j
l_i=0
l_j = 0
' ne pas instancier l_DossierTemp avec un "new", sinom les ID sont incrémentés inutillement car une nouvelle instance de class est crée
if (UBound(m_lstDossiers)) > 0 then
for l_i=0 to UBound(m_lstDossiers)-1
for l_j=0 to UBound(m_lstDossiers)-1
if (l_i<>l_j) and (l_i > l_j) and(StrComp(ReplaceTest("(<.+>)+(.+)","$2" ,l_n_dossierI),ReplaceTest("(<.+>)+(.+)","$2" , l_n_dossierJ), vbTextCompare) = -1) then
set l_DossierTemp = m_lstDossiers(l_i)
set m_lstDossiers(l_i) = m_lstDossiers(l_j)
set m_lstDossiers(l_j) = l_DossierTemp
set l_DossierTemp = nothing
end if
next
next
end if
m_trier = true
end sub
Private sub TrierDossiersParID
' --------------------------------------------------- clsDossier - ReplaceTest3(patrn, replStr, byval str1)
dim l_DossierTemp
dim l_n_dossierI, l_n_dossierJ, l_i, l_j
dim l_I_limit, l_J_limit
' redim m_lstSelect(0)
l_i=0
l_j=0
if (UBound(m_lstDossiers)) > 0 then
' FONCTIONNE MAIS INCREMENTE INUTILLEMT (Début)°
' set l_DossierTemp = new clsDossier
for l_i=0 to UBound(m_lstDossiers)-1
for l_j=0 to UBound(m_lstDossiers)-1
l_n_dossierI =m_lstDossiers(i).ID
l_n_dossierJ = m_lstDossiers(J).ID
' if (i<>j) and (StrComp(l_n_dossierI, l_n_dossierJ, vbTextCompare) = -1) then ' = <
if (l_i<>l_j) and(l_i > l_j) then
' l_nameI = ltrim(rtrim(ReplaceTest2("(.*)[<+.+>+]*(.*)", "$1$3", l_nameI )))
' l_nameJ = ltrim(rtrim(ReplaceTest2("(.*)[<+.+>+]*(.*)", "$1$3", l_nameJ )))
set l_DossierTemp = m_lstDossiers(i)
set m_lstDossiers(i) = m_lstDossiers(j)
set m_lstDossiers(j) = l_DossierTemp
set l_DossierTemp = nothing
end if
next
next
' FONCTIONNE MAIS INCREMENTE INUTILLEMT (Fin)°
' set l_DossierTemp = nothing
end if
end sub
' *********************************************************************
' clsDossier - Property LET
' *********************************************************************
Public Property Let AddDossier(p_SousDossier)
' --------------------------------------------------- clsDossier - LET - AddDossier(unSousDossier)
dim i
redim Preserve m_lstDossiers(m_nbSousDossiers+1)
'MODIF set m_lstDossiers(m_nbSousDossiers) = new clsDossier
set m_lstDossiers(m_nbSousDossiers) = p_SousDossier
for i = 0 to (ubound(m_lstPeres)-1)
m_lstDossiers(m_nbSousDossiers).AddPere = m_lstPeres(i)
next
' m_lstDossiers(m_nbSousDossiers).AddPere2 m_lstPeres, m_id
' le trie doit être fait seulement, avant l'affichage, pour que membres de la classe restent accéssible le temps du remplisage des classes imbriquées
' si une fonction extérieur décide d'améliorer les titre des dossiers, elle doit pour les retrouvé sans faire une fonction ID ou de recherche par le nom qui peut se retrouver plusieurs fois dans les dossiers
if i>0 then
m_trier = false
end if
m_nbSousDossiers = m_nbSousDossiers + 1
end Property
' ---------------------------------------------------
Public Property Let AddPere(unPere)
' --------------------------------------------------- clsDossier - LET - AddPere desc = Rempli le tableau des dossiers assendant pour evité un affichage infinit
dim y
y=0
redim Preserve m_lstPeres(m_nbPeres +1)
m_lstPeres(m_nbPeres) = unPere
' -------------------------------------------------------
' - Quand j'ajoute un pere , je l'ajoute aux sous doddsseir
' -------------------------------------------------------
' for x =0 to ubound(m_lstDossiers) - 1
MsgBox "m_nbPeres 412 = " & m_nbPeres
for y=0 to ubound(m_lstDossiers) - 1
m_lstDossiers(y).AddPere = unPere
' MsgBox "y = " & y
next
m_nbPeres = m_nbPeres + 1
end property
' ---------------------------------------------------
Public Property Let Name(strName)
' --------------------------------------------------- clsDossier - LET - Name
' strName = Replace(strName, chr(34), " ")
m_name = strName
end Property
' ---------------------------------------------------
Property Let ID(unID) ' ne doit pas être utilisé hors de la classe car il ajouterait un nouvel id et ne remplacerait pas le précédant
' --------------------------------------------------- clsDossier - LET - Name
dim x,y, l_IDold
l_IDold = m_id
m_id = unID
' Boucle qui mets à jours les dossiers fils lorsqu'un dossier contient déjà des sous dossiers
for y =0 to ubound(m_lstDossiers) - 1
for x = 0 to ubound(m_lstPeres) -1
m_lstDossiers(y).AddPere = m_lstPeres(x)
next
next
end Property
' *********************************************************************
' clsDossier - Property GET
' *********************************************************************
Property Get ID()
ID = m_id
end Property
Public Property Get GetSousDossiers()
' --------------------------------------------------- PROPERTY - GET - GetSousDossiers
GetSousDossiers = m_lstDossiers
end property
Public Property get GetSousDossier(indice_g2)
' --------------------------------------------------- PROPERTY - GET - GetSousDossier
if (indice_g2 <= UBound(m_lstDossiers)-1) then
set GetSousDossier = m_lstDossiers(indice_g2)
' set GetSousDossierLast = m_lstDossiers(ubound(m_lstDossiers)-1)
else
MsgBox "Ajouter un sous dossier avant - GetSousDossier('" & indice_g2 & "')"
set GetSousDossier= nothing
end if
' TrierDossiers
End property
'### NOUVEAU
Public Property get GetSousDossierLast()
' --------------------------------------------------- PROPERTY - GET - GetSousDossier
if (UBound(m_lstDossiers)>0) then
set GetSousDossierLast = m_lstDossiers(ubound(m_lstDossiers)-1)
else
msgbox("Ajouter un sous dossier avant - GetSousDossierLast(" & ubound(m_lstDossiers)-1 & ")" & vbcrlf _
& "UBound(m_lstDossiers)-1 = " & UBound(m_lstDossiers)-1)
set GetSousDossierLast= nothing
end if
' TrierDossiers
End property
Public Property Get Name()
' --------------------------------------------------- PROPERTY - GET - Name
Name = m_name
end Property
' *********************************************************************
' clsDossier - Public Function
' *********************************************************************
public Function Affiche()
' ------------------------------------------------------------------------------------ clsDossier -
dim tempSousDossier
dim l_isd
dim l_trait
l_isd = 0
wscript.echo " dir(" & m_id & ") --- l_name = " & m_name
wscript.echo "ubound(m_lstDossiers) = " & ubound(m_lstDossiers)
if IsArray(m_lstDossiers) then
TrierDossiers
for l_isd=0 to ubound(m_lstDossiers)-1
m_lstDossiers(l_isd).Affiche
next
' l_isd = l_isd + 1
end if
end function
public Function Affiche2(p_niveau) 'transmet les niveaux
' ------------------------------------------------------------------------------------ clsDossier -
dim tempSousDossier
dim l_isd
dim l_trait
dim compt
compt = 0
l_isd = 0
for compt = 0 to p_niveau
l_trait = l_trait & m_cnstTrait
next
wscript.echo l_trait & "> dir(" & m_id & ") --- l_name = " & m_name & " - niveau = " & p_niveau
wscript.echo l_trait & " ubound(m_lstDossiers) = " & ubound(m_lstDossiers) & "" & vbCrLf
if IsArray(m_lstDossiers) then
TrierDossiers
p_niveau = p_niveau+1
for l_isd=0 to ubound(m_lstDossiers)-1
m_lstDossiers(l_isd).Affiche2 p_niveau
p_niveau = p_niveau -1
next
' l_isd = l_isd + 1
end if
end function
' Crétion d'un dossier inclu rapides en une ligne sans avoir à renseigner toute la classe
' -----------------------------------------------------------------------------------
Public function AddDossierTarget(p_name, p_chemin,p_target)
' -----------------------------------------------------------------------------------
dim l_tmpDossier
dim l_i
set l_tmpDossier = new clsDossier
with l_tmpDossier
.Name = p_name
end with
redim Preserve m_lstDossiers(m_nbSousDossiers + 1)
set m_lstDossiers(m_nbSousDossiers) = l_tmpDossier
m_lstDossiers(m_nbSousDossiers).AddPere = m_id
for l_i = 0 to ubound(m_lstPeres) -1
m_lstDossiers(m_nbSousDossiers).AddPere = m_lstPeres(l_i)
next
set l_tmpDossier = nothing
m_nbSousDossiers = m_nbSousDossiers + 1
AddDossierTarget = m_nbSousDossiers-1
End function
end class
' - Sript d'éxemple d'utilisation de la classe: clsDossiers
'---------------------------------------------------------------------
dim unDossierTeste, unDossierTeste1, unDossierTeste2, unDossierTeste3
IdFolder = 0
set unDossierTeste = new clsDossier
set unDossierTeste1 = new clsDossier
set unDossierTeste2 = new clsDossier
set unDossierTeste3 = new clsDossier
unDossierTeste.Name = "Premier"
unDossierTeste1.Name = "test1"
unDossierTeste2.Name = "test2"
unDossierTeste3.Name = "test3"
unDossierTeste.AddDossierTarget "Sous Test1", "c:\", "_sefl"
unDossierTeste.AddDossier = unDossierTeste1
unDossierTeste.AddDossier = unDossierTeste2
unDossierTeste.AddDossier= unDossierTeste3
' Attention, si unDossierTeste3 s'ajoute à unDossierTeste3 sans qye le premier soit passer à nothing, on obtient un boucle infinit dans l'affichage car les deux variable pointent au même endroit
' il faut donc le réinitilister pour eviter une boucle infinit d'appel pointant à la m^m adresse.
set unDossierTeste1 = nothing
set unDossierTeste2 = nothing
set unDossierTeste3 = nothing
set unDossierTeste3 = new clsDossier
unDossierTeste3.Name = "Trois 2"
unDossierTeste.GetSousDossierLast.AddDossier = unDossierTeste3
wscript.echo "unDossierTeste.Name = " & unDossierTeste.Name & vbCrLf _
& "-----------------------------------------" & vbcrlf _
& "ubound(unDossierTeste.GetSousDossiers) = " & ubound(unDossierTeste.GetSousDossiers) & vbcrlf _
& "ubound(unDossierTeste.GetSousDossierLast.GetSousDossiers) = " & ubound(unDossierTeste.GetSousDossierLast.GetSousDossiers) & vbcrlf _
& "-----------------------------------------" & vbcrlf & vbcrlf _
& "unDossierTeste.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.Name & vbCrLf _
& "-----------------------------------------" & vbcrlf _
& "unDossierTeste.GetSousDossier(0).Name = " & unDossierTeste.GetSousDossier(0).Name & vbcrlf _
& "unDossierTeste.GetSousDossier(1).Name = " & unDossierTeste.GetSousDossier(1).Name & vbcrlf _
& "unDossierTeste.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.Name & vbcrlf _
& "unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name = " & unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name & vbcrlf
'unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name = "nom Changé"
wscript.echo " nom changer = " & unDossierTeste.GetSousDossierLast.GetSousDossierLast.Name & vbcrlf _
& "-----------------------------------------" & vbcrlf & vbcrlf
wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type1 = Start "_
& vbCrLf & "-----------------------------------------" & vbcrlf
unDossierTeste.Affiche
wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type1 = FIN "_
& vbCrLf & "-----------------------------------------" & vbcrlf
wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type2 = Start "_
& vbCrLf & "-----------------------------------------" & vbcrlf
unDossierTeste.Affiche2(0)
wscript.echo vbcrlf & "-----------------------------------------" & vbcrlf & "Affiche tout type2 = FIN "_
& vbCrLf & "-----------------------------------------" & vbcrlf
Conclusion
***** Pour tester :
- enregistrez dans un fichier.VBS
- tapez (dans une console) : cscript "fichier.VBS" à l'emplacement du source pour voir défiler les dossiers créés.
Conclusion:
- Faire des classes avec des fonctions de parcour récusive est dure car il y a peut ou pas d'éxemple qui montre comment la former pour pouvoir connaitre la taille des sous élémentents à fin de les parcourirs récursivement.
nb: Les sous classes sont clasées, à l'affichage (et prènnent compte les balises HTML pour ASP) par ordre alphabétique, donc, après un premier affichage les éléments ont changée de place.
Avantage du code:
- Peut d'éxemple, voir aucun ne sont disponibles qui permèttent l'accès à des sous classe du type class.sousClasse(1).sousClasse(4).titre
- montre une astuce pour connaitre la taille des sous éléménts à afficher.
- Utiliste un appel recursif d'affichage des sous sous sous classes
Historique
- 14 septembre 2011 01:59:29 :
- Fioritures
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
appel de fonction ASP(vbscript) depuis un script Javascript [ par francis ]
bonjour,je n'arrive pas à appeler une fonction en ASP(vbscript) depuis un script écrit en javascript.Ceci car je veux mettre en variable session un va
Impression en ASP + VBscript [ par jfu ]
HelloJe voudrais sur mon site intranet écrit en ASP et VBscript editer l'écran en cours en cliquant sur un bouton mais je voudrais imprimer directemen
pbm composant & ASP [ par Kenos ]
Bonjour a tous,J'ai un pbm vraiment surprenant; vous pourrez surement m'aider. Alors voila:Sous VB 6.0, j'ai crée un projet qui comporte entre autre u
ASP et VBScript [ par Kalyminou ]
BonjourJe travail en informatique et j'ai un nouveau mandat en .NET. Par contre, je ne connais rien à la programmation Web. Est-ce que vous auriez d
javascript vbscript et asp [ par kriss ]
Bonjour,Qui peut me dire comment dans une page asp passer une variable vbscript a javascript et l'inverse passer une variable javascript a vbscript.Me
ecriture vbscript + plantage iis [ par jmg ]
bonjour, j'ai un pb avec asphttp://localhost/localstart.asp marche, mon index aussi mais ma page d'écriture de fichier "confirm.asp" ne veut pas s'o
passage variable de vbscript vers asp [ par laspirant ]
Bonjour à tous,je me lance pour mon baptème sur ce forum.voilà, dans une de mes pages, j'ai un code vbs client qui genere un MsgBox ( jusque là pas de
Variable ASP en JavaScript ou VbScript ??? [ par Silfried ]
Bonjour, Je suis présentement dans mon cours de programmation orienté internet et j'ai poser une question a mes intrusteurs qui est la suivante:Comme
aquivalent EVAL en ASP/VBscript [ par master92a ]
HugyBonjour, connaissez vous un equivalent a EVAL en ASP/VBscript??MErci
[ASP.net][C#] Séparation de la classe [ par otterc8 ]
Bonjour, bonsoir bonne nuit!Je voudrais savoir s'il est possible de séparer une classe du reste du code en ASP.net!?ex:MaClasse{ Attrib1; Attrib
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Forum
PORTE XORPORTE XOR par haho87
Cliquez pour lire la suite par haho87
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|