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
Partager