OVH Cloud OVH Cloud

array, vector ou list

4 réponses
Avatar
Maileen
Bonjour,

J'aimerai sauvegarder dans un conteneur plusieurs valeurs, un peu comme
en C++, dans un vecteur.

en VB.NET, array semble uniquement pour des valeurs de meme type.
Je n'ai rien lu sur les stringlist comme en C++.

Par consequent, comment puis-je stocker les valeurs suivantes :

"line1", "test", 5
"line2", "bad", 6
"line54", "good",1547

Merci,
Maileen

4 réponses

Avatar
Jean-Marc
"Maileen" a écrit dans le message de
news:%
Bonjour,

J'aimerai sauvegarder dans un conteneur plusieurs valeurs, un peu comme
en C++, dans un vecteur.

en VB.NET, array semble uniquement pour des valeurs de meme type.
Je n'ai rien lu sur les stringlist comme en C++.

Par consequent, comment puis-je stocker les valeurs suivantes :

"line1", "test", 5
"line2", "bad", 6
"line54", "good",1547




Hello,

Est ce qu'un tableau avec un type utilisateur conviendrait?
Quelque chose comme:

Type monType
v1 As String
v2 As String
v3 As Long
End Type

puis un tableau de ce type:
Dim monTableau(10) as mon TYpe

monTableau(1).v1 = "line1"
monTableau(1).v2 = "test"
MonTableau(1).v3 = 5
' ..
monTableau(2).v1 = "line2"
monTableau(2).v2 = "good"
' etc.
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
ng
Salut,

Dans un Collection ou une Collecion fortement typée (en .Net il suffit de
faire une classe dérivant de CollectionBase).

--
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/

Maileen wrote:
Bonjour,

J'aimerai sauvegarder dans un conteneur plusieurs valeurs, un peu
comme en C++, dans un vecteur.

en VB.NET, array semble uniquement pour des valeurs de meme type.
Je n'ai rien lu sur les stringlist comme en C++.

Par consequent, comment puis-je stocker les valeurs suivantes :

"line1", "test", 5
"line2", "bad", 6
"line54", "good",1547

Merci,
Maileen


Avatar
christophe-pasde
Bonjour,

Et en VB6 une nouvelle Interface de l'objet collection.

Ceci dit pour être un peu plus précis et pour répondre à la question posée.

Créer une classe:
Class1
Une autre classe, collection de d'objet class1 que l'on nomme
ListeClass1

Ne pas oublier de regler les attributs de la procédure new_enum
avec id_procedure=-4 et "masqué ce membre" coché.
Pour Item: ID_Proc = (par defaut).

Ci-dessous un exemple non testé.

Ensuite dans le codegénéral tu utilises le "conteneur" comme ceci

pour un objet ListeClass1: MyListe

'... Traitement du lot

Dim p as class1

for each p in Mylist

[....]

end p

' Un class1 particulier

Set p = Mylist(" 2")
' Renvoi l'objet class1 dont la clef (str(p.id)) est " 2"
'Provoque une erreur récupérable si la clef n'existe pas.

Line$= p.linenumber

etc ....

Christophe
'*************************
'class1
'*************************

Private mLineNumber As String
Private mValue As String
Private mIndex As Long

Public Property Get LineNumber() As String

LineNumber = mLineNumber

End Property

Public Property Let LineNumber(ByVal LineNumber As String)

mLineNumber = LineNumber

End Property

Public Property Get LineNumber() As String

LineNumber = mValue

End Property

Public Property Let LineNumber(ByVal LineNumber As String)

mValue = LineNumber

End Property

Public Property Get Index() As Long

Index = mIndex

End Property

Public Property Let Index(ByVal Index As Long)

mIndex = Index

End Property
'*****************************************
' Listeclass1
'******************************************
Option Explicit

Private m_col As Collection

'****************************

Public Function Add(p As Class1) As Class1

Call m_col.Add(p, Str(p.Index))

End Function
Public Function Item(ByRef v As Variant) As Class1
Set Item = m_col.Item(v)
End Function

Public Function Count() As Long
Count = m_col.Count
End Function

Public Sub Delete(ByVal v As Variant)

Call m_col.Remove(v)
End Sub
Public Function NewEnum() As IEnumVARIANT
Set NewEnum = m_col.[_NewEnum]
End Function

Private Sub Class_Initialize()
Set m_col = New Collection
End Sub

Private Sub Class_Terminate()
Set m_col = Nothing
End Sub
Avatar
ng
Salut,

Il me seble qu'il parlait bien de dotNet c'est pour ca que je parle de
dériver CollectionBase.

--
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/

christophe-pasde<> @wanadoo.fr>" < wrote:
Bonjour,

Et en VB6 une nouvelle Interface de l'objet collection.

Ceci dit pour être un peu plus précis et pour répondre à la question
posée.
Créer une classe:
Class1
Une autre classe, collection de d'objet class1 que l'on nomme
ListeClass1

Ne pas oublier de regler les attributs de la procédure new_enum
avec id_procedure=-4 et "masqué ce membre" coché.
Pour Item: ID_Proc = (par defaut).

Ci-dessous un exemple non testé.

Ensuite dans le codegénéral tu utilises le "conteneur" comme ceci

pour un objet ListeClass1: MyListe

'... Traitement du lot

Dim p as class1

for each p in Mylist

[....]

end p

' Un class1 particulier

Set p = Mylist(" 2")
' Renvoi l'objet class1 dont la clef (str(p.id)) est " 2"
'Provoque une erreur récupérable si la clef n'existe pas.

Line$= p.linenumber

etc ....

Christophe
'*************************
'class1
'*************************

Private mLineNumber As String
Private mValue As String
Private mIndex As Long

Public Property Get LineNumber() As String

LineNumber = mLineNumber

End Property

Public Property Let LineNumber(ByVal LineNumber As String)

mLineNumber = LineNumber

End Property

Public Property Get LineNumber() As String

LineNumber = mValue

End Property

Public Property Let LineNumber(ByVal LineNumber As String)

mValue = LineNumber

End Property

Public Property Get Index() As Long

Index = mIndex

End Property

Public Property Let Index(ByVal Index As Long)

mIndex = Index

End Property
'*****************************************
' Listeclass1
'******************************************
Option Explicit

Private m_col As Collection

'****************************

Public Function Add(p As Class1) As Class1

Call m_col.Add(p, Str(p.Index))

End Function
Public Function Item(ByRef v As Variant) As Class1
Set Item = m_col.Item(v)
End Function

Public Function Count() As Long
Count = m_col.Count
End Function

Public Sub Delete(ByVal v As Variant)

Call m_col.Remove(v)
End Sub
Public Function NewEnum() As IEnumVARIANT
Set NewEnum = m_col.[_NewEnum]
End Function

Private Sub Class_Initialize()
Set m_col = New Collection
End Sub

Private Sub Class_Terminate()
Set m_col = Nothing
End Sub