Bonjour,
Je souhaiterai utilisé des tableaux associatifs:
Tab(label) = value
Quelle structure de données peut me permettre cette utilisation?
Merci d'avance
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Antoine Dinimant
les collections
Zeg a écrit:
Bonjour, Je souhaiterai utilisé des tableaux associatifs: Tab(label) = value Quelle structure de données peut me permettre cette utilisation? Merci d'avance
les collections
Zeg a écrit:
Bonjour,
Je souhaiterai utilisé des tableaux associatifs:
Tab(label) = value
Quelle structure de données peut me permettre cette utilisation?
Merci d'avance
Bonjour, Je souhaiterai utilisé des tableaux associatifs: Tab(label) = value Quelle structure de données peut me permettre cette utilisation? Merci d'avance
ng
Salut,
On pourrait aussi utiliser une classe :
'// Code sur Form1 :
Private Sub Form_Load() Dim cTest As cATbl, i As Integer Set cTest = New cATbl '//Ajout Call cTest.Add("fr", "salut") Call cTest.Add("en", "hi") Call cTest.Add("de", "hallo")
'//Listage standart For i = 1 To cTest.Count MsgBox "Liste : " & cTest.Item(i) Next
'//Appel par nom MsgBox "Par nom : " & cTest.Item("de") MsgBox "Par nom : " & cTest.Item("fr") MsgBox "Par nom : " & cTest.Item("en")
'//Suppresion Call cTest.Remove(2) '//Enlève en
For i = 1 To cTest.Count MsgBox "Liste : " & cTest.Item(i) Next
Call cTest.Remove("de")
For i = 1 To cTest.Count MsgBox "Liste 2 : " & cTest.Item(i) Next
Set cTest = Nothing End Sub
'//Classe cATbl :
Option Explicit Option Compare Text
Private Type tcData strID As String vData As Variant End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant) Dim tLigne As tcData tLigne.vData = vData tLigne.strID = ID Call AjoutTableauLigne(tLigne, m_tblData) End Sub
Public Sub Remove(vID As Variant) Select Case VarType(vID) Case vbInteger, vbLong Call SupprimeTableauLigne(CInt(vID) - 1, m_tblData) Case vbString Call SupprimeTableauLigne(GetIndexFromID(CStr(vID)), m_tblData) End Select End Sub
Public Property Get Count() As Integer Count = TableauCount(m_tblData) End Property
Public Property Get Item(vID As Variant) As Variant Select Case VarType(vID) Case vbInteger, vbLong Item = m_tblData(CInt(vID) - 1).vData Case vbString Item = m_tblData(GetIndexFromID(CStr(vID))).vData End Select End Property
Public Property Let Item(vID As Variant, ByVal vNewValue As Variant) Select Case VarType(vID) Case vbInteger, vbLong m_tblData(CInt(vID) - 1).vData = vNewValue Case vbString m_tblData(GetIndexFromID(CStr(vID))).vData = vNewValue End Select End Property
Private Function GetIndexFromID(ID As String) As Integer If EstTableauValide(m_tblData) Then Dim i As Integer For i = 0 To UBound(m_tblData) If m_tblData(i).strID = ID Then GetIndexFromID = i Exit For '//BREAK End If Next End If End Function
Private Sub Class_Terminate() Erase m_tblData End Sub
Private Sub AjoutTableauLigne(tLigne As tcData, tblTableau() As tcData) If EstTableauValide(tblTableau) Then Dim nInd As Integer nInd = UBound(tblTableau) + 1 ReDim Preserve tblTableau(nInd) tblTableau(nInd) = tLigne Else ReDim tblTableau(0) tblTableau(0) = tLigne End If End Sub
Private Function EstTableauValide(tblTableau() As tcData) As Boolean On Error Resume Next Err.Clear Dim lTest As Long lTest = UBound(tblTableau) EstTableauValide = (Err.Number = 0) On Error GoTo 0 End Function
Private Sub SupprimeTableauLigne(Index As Integer, tblTableau() As tcData) If EstTableauValide(tblTableau) Then If Index <= UBound(tblTableau) Then Dim tblTmp() As tcData, i As Integer For i = 0 To UBound(tblTableau) If i <> Index Then Call AjoutTableauLigne(tblTableau(i), tblTmp) End If Next tblTableau = tblTmp Erase tblTmp End If End If End Sub
Private Function TableauCount(tblTableau() As tcData) As Integer If EstTableauValide(tblTableau) Then TableauCount = UBound(tblTableau) + 1 Else TableauCount = 0 End If End Function
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
Zeg a écrit :
Bonjour, Je souhaiterai utilisé des tableaux associatifs: Tab(label) = value Quelle structure de données peut me permettre cette utilisation? Merci d'avance
Salut,
On pourrait aussi utiliser une classe :
'// Code sur Form1 :
Private Sub Form_Load()
Dim cTest As cATbl, i As Integer
Set cTest = New cATbl
'//Ajout
Call cTest.Add("fr", "salut")
Call cTest.Add("en", "hi")
Call cTest.Add("de", "hallo")
'//Listage standart
For i = 1 To cTest.Count
MsgBox "Liste : " & cTest.Item(i)
Next
'//Appel par nom
MsgBox "Par nom : " & cTest.Item("de")
MsgBox "Par nom : " & cTest.Item("fr")
MsgBox "Par nom : " & cTest.Item("en")
'//Suppresion
Call cTest.Remove(2) '//Enlève en
For i = 1 To cTest.Count
MsgBox "Liste : " & cTest.Item(i)
Next
Call cTest.Remove("de")
For i = 1 To cTest.Count
MsgBox "Liste 2 : " & cTest.Item(i)
Next
Set cTest = Nothing
End Sub
'//Classe cATbl :
Option Explicit
Option Compare Text
Private Type tcData
strID As String
vData As Variant
End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant)
Dim tLigne As tcData
tLigne.vData = vData
tLigne.strID = ID
Call AjoutTableauLigne(tLigne, m_tblData)
End Sub
Public Sub Remove(vID As Variant)
Select Case VarType(vID)
Case vbInteger, vbLong
Call SupprimeTableauLigne(CInt(vID) - 1, m_tblData)
Case vbString
Call SupprimeTableauLigne(GetIndexFromID(CStr(vID)), m_tblData)
End Select
End Sub
Public Property Get Count() As Integer
Count = TableauCount(m_tblData)
End Property
Public Property Get Item(vID As Variant) As Variant
Select Case VarType(vID)
Case vbInteger, vbLong
Item = m_tblData(CInt(vID) - 1).vData
Case vbString
Item = m_tblData(GetIndexFromID(CStr(vID))).vData
End Select
End Property
Public Property Let Item(vID As Variant, ByVal vNewValue As Variant)
Select Case VarType(vID)
Case vbInteger, vbLong
m_tblData(CInt(vID) - 1).vData = vNewValue
Case vbString
m_tblData(GetIndexFromID(CStr(vID))).vData = vNewValue
End Select
End Property
Private Function GetIndexFromID(ID As String) As Integer
If EstTableauValide(m_tblData) Then
Dim i As Integer
For i = 0 To UBound(m_tblData)
If m_tblData(i).strID = ID Then
GetIndexFromID = i
Exit For '//BREAK
End If
Next
End If
End Function
Private Sub Class_Terminate()
Erase m_tblData
End Sub
Private Sub AjoutTableauLigne(tLigne As tcData, tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
Dim nInd As Integer
nInd = UBound(tblTableau) + 1
ReDim Preserve tblTableau(nInd)
tblTableau(nInd) = tLigne
Else
ReDim tblTableau(0)
tblTableau(0) = tLigne
End If
End Sub
Private Function EstTableauValide(tblTableau() As tcData) As Boolean
On Error Resume Next
Err.Clear
Dim lTest As Long
lTest = UBound(tblTableau)
EstTableauValide = (Err.Number = 0)
On Error GoTo 0
End Function
Private Sub SupprimeTableauLigne(Index As Integer, tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
If Index <= UBound(tblTableau) Then
Dim tblTmp() As tcData, i As Integer
For i = 0 To UBound(tblTableau)
If i <> Index Then
Call AjoutTableauLigne(tblTableau(i), tblTmp)
End If
Next
tblTableau = tblTmp
Erase tblTmp
End If
End If
End Sub
Private Function TableauCount(tblTableau() As tcData) As Integer
If EstTableauValide(tblTableau) Then
TableauCount = UBound(tblTableau) + 1
Else
TableauCount = 0
End If
End Function
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/
Zeg <zegis.nospam@free.fr> a écrit :
Bonjour,
Je souhaiterai utilisé des tableaux associatifs:
Tab(label) = value
Quelle structure de données peut me permettre cette utilisation?
Merci d'avance
Private Sub Form_Load() Dim cTest As cATbl, i As Integer Set cTest = New cATbl '//Ajout Call cTest.Add("fr", "salut") Call cTest.Add("en", "hi") Call cTest.Add("de", "hallo")
'//Listage standart For i = 1 To cTest.Count MsgBox "Liste : " & cTest.Item(i) Next
'//Appel par nom MsgBox "Par nom : " & cTest.Item("de") MsgBox "Par nom : " & cTest.Item("fr") MsgBox "Par nom : " & cTest.Item("en")
'//Suppresion Call cTest.Remove(2) '//Enlève en
For i = 1 To cTest.Count MsgBox "Liste : " & cTest.Item(i) Next
Call cTest.Remove("de")
For i = 1 To cTest.Count MsgBox "Liste 2 : " & cTest.Item(i) Next
Set cTest = Nothing End Sub
'//Classe cATbl :
Option Explicit Option Compare Text
Private Type tcData strID As String vData As Variant End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant) Dim tLigne As tcData tLigne.vData = vData tLigne.strID = ID Call AjoutTableauLigne(tLigne, m_tblData) End Sub
Public Sub Remove(vID As Variant) Select Case VarType(vID) Case vbInteger, vbLong Call SupprimeTableauLigne(CInt(vID) - 1, m_tblData) Case vbString Call SupprimeTableauLigne(GetIndexFromID(CStr(vID)), m_tblData) End Select End Sub
Public Property Get Count() As Integer Count = TableauCount(m_tblData) End Property
Public Property Get Item(vID As Variant) As Variant Select Case VarType(vID) Case vbInteger, vbLong Item = m_tblData(CInt(vID) - 1).vData Case vbString Item = m_tblData(GetIndexFromID(CStr(vID))).vData End Select End Property
Public Property Let Item(vID As Variant, ByVal vNewValue As Variant) Select Case VarType(vID) Case vbInteger, vbLong m_tblData(CInt(vID) - 1).vData = vNewValue Case vbString m_tblData(GetIndexFromID(CStr(vID))).vData = vNewValue End Select End Property
Private Function GetIndexFromID(ID As String) As Integer If EstTableauValide(m_tblData) Then Dim i As Integer For i = 0 To UBound(m_tblData) If m_tblData(i).strID = ID Then GetIndexFromID = i Exit For '//BREAK End If Next End If End Function
Private Sub Class_Terminate() Erase m_tblData End Sub
Private Sub AjoutTableauLigne(tLigne As tcData, tblTableau() As tcData) If EstTableauValide(tblTableau) Then Dim nInd As Integer nInd = UBound(tblTableau) + 1 ReDim Preserve tblTableau(nInd) tblTableau(nInd) = tLigne Else ReDim tblTableau(0) tblTableau(0) = tLigne End If End Sub
Private Function EstTableauValide(tblTableau() As tcData) As Boolean On Error Resume Next Err.Clear Dim lTest As Long lTest = UBound(tblTableau) EstTableauValide = (Err.Number = 0) On Error GoTo 0 End Function
Private Sub SupprimeTableauLigne(Index As Integer, tblTableau() As tcData) If EstTableauValide(tblTableau) Then If Index <= UBound(tblTableau) Then Dim tblTmp() As tcData, i As Integer For i = 0 To UBound(tblTableau) If i <> Index Then Call AjoutTableauLigne(tblTableau(i), tblTmp) End If Next tblTableau = tblTmp Erase tblTmp End If End If End Sub
Private Function TableauCount(tblTableau() As tcData) As Integer If EstTableauValide(tblTableau) Then TableauCount = UBound(tblTableau) + 1 Else TableauCount = 0 End If End Function
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
Zeg a écrit :
Bonjour, Je souhaiterai utilisé des tableaux associatifs: Tab(label) = value Quelle structure de données peut me permettre cette utilisation? Merci d'avance