Bonjour, débutant en .net je suis en train de développer une petite appli perso.

J'ai donc une Structure qui contient différents tableaux (appelés A(), E(), EA(), SA(), etc...) qui sont composés d'éléments issus d'une autre structure (avec des champs Champ1 as string, champ2 as boolean, etc...).

J'ai une variable Var qui est du type de ma structure de tableaux et dans une partie de mon code, j'extrais des données d'un fichier qui en fonction d'une première valeur du genre "A50", "E100" me permet d'aller ranger les données suivantes dans Var.A(50).champ1, Var.A(50).champ2 ou Var.E(100).champ1, Var.E(100).champ2.

Pour ce faire, je décompose le "A50" en "A" (rangé dans maSTRING) et 50 (rangé dans i), puis j'ai un select case sur maSTRING avec des cases "A", "E", etc... et dans chaque case, j'ai:
Var.A(i).champ1=truc (lu dans le fichier)
Var.A(i).champ2=bidule (lu dans le fichier)
ou
Var.E(i).champ1=truc (lu dans le fichier)
Var.E(i).champ2=bidule (lu dans le fichier)

Ca marche bien, mais ce n'est pas trés élégant et du coup je me dis qu'on doit pouvoir faire mieux, beaucoup mieux.

Existe-t-il une manière de se passer du SELECT CASE et d'écrire juste:
var.[quelque chose qui regarde le contenu de maSTRING](I).champ1=truc
var.[quelque chose qui regarde le contenu de maSTRING](I).champ2=bidule
Mais ceci une seule fois.

En plus dans le reste de mon appli, il va falloir que je retourne lire le contenu des champ1 et champ2 en fonction du "A50" ou "E100", si à chaque fois il faut que je me retape un select case, pas glop.

C'est peut-être aussi ma manière de déclarer mes 2 structures (celle des tableaux et celle des champs) qui n'est pas terrible?

Merci à vous si quelqu'un peut me donner un petit coup de main.

ci-joint le "super code" en cause

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
' Déclaration des types
Public Structure TypeVariable
    Friend Mnemo As String
    Friend Libelle As String
    Friend Activee As Boolean
    Friend Utilisee As Boolean
    Friend Activation As ArrayList
    Friend Reset As ArrayList
End Structure
 
Public Structure MapingVariables
    Friend E() As TypeVariable
    Friend A() As TypeVariable
    Friend B() As TypeVariable
    Friend R() As TypeVariable
    Friend M() As TypeVariable
    Friend V() As TypeVariable
    Friend EA() As TypeVariable
    Friend SA() As TypeVariable
    Friend EN() As TypeVariable
    Friend SN() As TypeVariable
    Friend T() As TypeVariable
    Friend C() As TypeVariable
    Friend P() As TypeVariable
    Public Sub Initalise()
        ' Redimensionnement de la structure Var
        ReDim E(0 To 3000)
        ReDim A(0 To 3000)
        ReDim B(0 To 1023)
        ReDim R(0 To 1023)
        ReDim M(0 To 13823)
        ReDim EA(0 To 3000)
        ReDim SA(0 To 3000)
        ReDim EN(0 To 3000)
        ReDim SN(0 To 3000)
        ReDim V(0 To 1000)
        ReDim T(0 To 100)
        ReDim C(0 To 100)
        ReDim P(0 To 100)
        End Structure
 
Public Class EcranPrincipal
 
    ' Déclaration des variables
 
    Dim Var As MapingVariables
 
    Private Sub ExtractionVariables(ByVal NomFichier As String)
 
        ' Extrait les données de NomFichier et les classes dans les tableaux associés
 
        Dim MonStreamReader As New StreamReader(NomFichier)
        Dim TypeDonnee As String
        Dim AdresseDonnee As Integer
 
        ' Redimensionnement de la structure Var
        Var.Initalise()
 
        ' Parcourir le fichier MNEMO.SAV jusqu'à la fin par série de 3 lignes
        ' - Adresse
        ' - Mnémonique
        ' - Libellé
        Do While MonStreamReader.Peek() >= 0
            ' Lecture de la ligne qui contient l'adresse
            TypeDonnee = MonStreamReader.ReadLine
 
            ' Recherche si le type de variable et sur 1 ou 2 caractères
            If Mid(TypeDonnee, 2, 1) Like "#" Then
                AdresseDonnee = CInt(Microsoft.VisualBasic.Right(TypeDonnee, Len(TypeDonnee) - 1))
                TypeDonnee = Microsoft.VisualBasic.Left(TypeDonnee, 1)
            Else
                AdresseDonnee = CInt(Microsoft.VisualBasic.Right(TypeDonnee, Len(TypeDonnee) - 2))
                TypeDonnee = Microsoft.VisualBasic.Left(TypeDonnee, 2)
            End If
 
            ' Classement des mnémo et libellé dans les index des types
            Select Case TypeDonnee
                Case "E"
                    ' Sauvegarde du mnémonique
                    Var.E(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.E(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "A"
                    ' Sauvegarde du mnémonique
                    Var.A(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.A(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "B"
                    ' Sauvegarde du mnémonique
                    Var.B(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.B(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "R"
                    ' Sauvegarde du mnémonique
                    Var.R(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.R(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "M"
                    ' Sauvegarde du mnémonique
                    Var.M(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.M(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "V"
                    ' Sauvegarde du mnémonique
                    Var.V(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.V(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "EA"
                    ' Sauvegarde du mnémonique
                    Var.EA(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.EA(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "SA"
                    ' Sauvegarde du mnémonique
                    Var.SA(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.SA(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "EN"
                    ' Sauvegarde du mnémonique
                    Var.EN(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.EN(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "SN"
                    ' Sauvegarde du mnémonique
                    Var.SN(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.SN(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "T"
                    ' Sauvegarde du mnémonique
                    Var.T(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.T(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "C"
                    ' Sauvegarde du mnémonique
                    Var.C(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.C(AdresseDonnee).Libelle = MonStreamReader.ReadLine
                Case "P"
                    ' Sauvegarde du mnémonique
                    Var.P(AdresseDonnee).Mnemo = MonStreamReader.ReadLine
                    ' Sauvegarde du libellé
                    Var.P(AdresseDonnee).Libelle = MonStreamReader.ReadLine
            End Select
        Loop
        MonStreamReader.Close()
        MonStreamReader = Nothing
 
    End Sub