begin process at 2013 06 20 05:51:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > OBJETS IMBRIQUÉES EN TABLEAU (EN VBSCRIPT OU ASP)

OBJETS IMBRIQUÉES EN TABLEAU (EN VBSCRIPT OU ASP)


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :VBScript, Structure, Class, Recursive, Astuce ASP Niveau :Initié Date de création :24/02/2011 Date de mise à jour :14/09/2011 02:17:44 Vu / téléchargé :7 810 / 62

Auteur : internetdev

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Simple classe VBScript imbriquée:
--------------------------------

Prati que pour faire une classe imbriquer en tableau à condition d'y modifié le code pour l'adapté en HTML / ASP mais je n'ai pas touvé de rubrique ASP.

Source avec le script de teste console, et hélas quelques variables inutiles que je n'ai pas viré!

Source

  • '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • '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
  • ' - pour ASP et Script dans pages:
  • ' L'ID est une variable extèrieure à la classe pour permetre de creér plusieurs arboréscences distinctes et les afficher dans la même page d'éxécution.
  • ' de façon à ce 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>
  • ' - Déclaration
  • 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>&nbsp;</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 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
  • 'END
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'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

' -  pour ASP et Script dans pages:
'     L'ID est une variable extèrieure à la classe pour permetre de creér plusieurs arboréscences distinctes et les afficher dans la même page d'éxécution.
'     de façon à ce 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>

'	- Déclaration
	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>&nbsp;</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		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


'END

 Conclusion

Permet de créer un objet accéssibe sous la forme:

- unObjet.Liste(0).Liste(1).Liste(25).titre
- ou même avec un tableaux sous classe intégrée:
        unObjet.Liste(0).Liste(1).élément(1).titre
        unObjet.Liste(0).Liste(1).élément(1).emplacement

Peut aussi être adapté en ASP pour afficher une arborescence de dossiers automatisés.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

14 septembre 2011 02:04:47 :
pas important
14 septembre 2011 02:17:44 :
commentaires modifiers à la marge

 Sources du même auteur

CLASSE IMBRIQUÉS EN VBSCRIPT DE DOSSIERS (APPLICABLE ASP)

 Sources de la même categorie

Source avec Zip GESTION DES SKIN par youdream
UTILISATION DE FTP.EXE DE WINDOWS EN ASP par Nicolas_kojack
FONCTION SIMPLE POUR ALTERNER LES COULEURS DES LIGNES D'UN T... par pakito_77
Source .NET (Dotnet) COMMENT PASSER UN PARAMÈTRE C# À FLASH ? par zigxag
COMPTEUR DE VISITE AVEC VARIABLE DE SESSION par tidave

 Sources en rapport avec celle ci

CLASSE IMBRIQUÉS EN VBSCRIPT DE DOSSIERS (APPLICABLE ASP) par internetdev
Source .NET (Dotnet) CLASS : TRACKING POUR VOTRE ECOMMERCE (MYSQL SQLSERVER) par vladam
Source .NET (Dotnet) CLASS : NEWSLETTER AVEC OPTIN par vladam
Source avec Zip Source avec une capture AFICHAGE HTML/ASP D'UNE STRUCTURE DE TABLE par AC1
Source avec Zip UPLOADER UN FICHIER SANS COMPOSANT ! {NOUVELLE METHODE} par Nix

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Pb avec un formulaire en VBscript (menu deroulant). [ par warrax ] Bonjour,Je commence la programmation en asp et vbscript et je n'arrive pas a reccuperer la valeur de ma selection d'un menu deroulant dans une fonctio 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 Validation d,un formulaire Avec VBScript [ par stephanie ] J'ai un formulaire HTML que je valide avec une fonction VBSCript. Ma fonction m'envoie bien le message d'erreur s'il manque des valeurs dans des zone Ouvrir un fichier distant .... [ par liquid ] Au secours ! Je ne comprends plus rien...J'ai besoin de savoir si on peut, et si oui, comment, ouvrir un fichier distant en vbscript.Je m'explique, j' Lien DDE [ par pat ] Bonjour à tous.Comment générer un lien DDE en VBScript ?en VB, ce sont les instructions DDEInitiate et DDERequest mais je n'arrive pas à les faire fon imprimer en vbscript [ par alex ] J'ai un problème. Je programme en asp et je voudrai que le client utilisant mon application puiss imprimer certaines pages. Que faire? Au secours. affichage [ par hamrouni ] je veut afficher un message en asp en utilisant vbscript comme l'instruction alert en jscript? ma deuxieme ?comment je peut retourner à la page précid pb vbscript / javascript [ par maryicka ] Bonjour,est-ce que la balise &lt;%@ language=vbscript%&gt; peut avoir des interferences sur un script &lt;script language="javascript"&gt; ?Est ce que problème avec ligne de code trop longue en vbscript [ par Bob ] Bonjour,J'ai un problème pour envoyer les valeurs que j'envoi à un autre via une Sub (VbScript).Après un certain nombre de paramètres,le logiciel que 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales