Contenu STRING pour adresser variable
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:
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 |