InfoGeo
Messages postés87Date d'inscriptionjeudi 2 février 2012StatutMembreDernière intervention17 avril 2013
-
5 mai 2011 à 09:17
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 2013
-
5 mai 2011 à 13:31
Bonjour,
Je usis en stage et la je sis amené à remplir un tableau avec que des variables différentes.
Je vous explique, dans un fichier ini, je récupère des variables grace a un split, ces variables correspondent au port série sur lequel est branché mon capteur, dans l'ordre j'ai:
Et je voudrais remplir un tableau ou il y aurait :
PortsSerie(1)=COM1
PortsSerie(2)=COM2
PortsSerie(3)=COM3
Vous avez une idée ? je pense que c'est pas compliqué mais je suis nouveau sur vb, en dessous je met mon fichier .ini et ce que j ai fait jusqu'à présent:
[i][SENSORS]
;syntaxe: nom du capteur=modèle du capteur adresse port série sur lequel il est relié où il est situé numéro de série
;ATTENTION: pour rajouter un capteur il faut absolument l'appeller HUMIDITY_X pour un capteur d'humidité, TEMPERATURE_X pour un capteur de température, PRESSURE_X pour un capteur de pression, OXYGEN_X pour un capteur d'oxygen
Public Sub Inisensors()
' Instancie les objets capteurs, définit et ouvre leur interface de communication
'=======variables=================
Dim i As Integer, j As Integer, k As Integer
Dim a As String, msgerr As String, B As String, C As String
Dim PortsSerie() As String, PortsTemp As String
'j 1
Call IniReadItems(ConfigHardIniPath, "SENSORS", MySensors()) 'permet de lire le nom des objets dans notre fichier
'ConfigHard (C:\Program Files\C-Mac\ConfigHard.ini)
ReDim sensors(0)
For i = 1 To UBound(MySensors)
' Lire la liste des ports série utilisés pour création des objets ports série
' renvoyer le résultat dans le tableau PortsSerie()
a = IniReadString(ConfigHardIniPath, "SENSORS", MySensors(i)) 'donne le nom du composant (ex: HUMIDTY_1)
ReDim Preserve sensors(UBound(sensors) + 1) 'augmente la taille de notre tableau sensors()
cfg_Sensors() = Split(a, "") 'permet d'avoir la chaine de caractère situé dans notre fichier ConfigHard
'qui a la syntaxe suivante: nom du capteur=modèle du capteur adresse port série sur lequel il est relié où il est situé numéro de série
If i = 1 Then
ReDim Preserve PortsSerie(j)
PortsSerie(j) = cfg_Sensors(2)
End If
k = i
ReDim Preserve PortsSerie(k)
PortsTemp(k) = PortsSerie(j)
If PortsSerie(j) <> cfg_Sensors(2) Then
For k = i To 1 Step -1
If cfg_Sensors(2) <> PortsTemp(k - 1) Then
GoTo NewCom
End If
Next k
End If
Debut: Next i
NewCom:
j = j + 1
ReDim Preserve PortsSerie(j)
PortsSerie(j) = cfg_Sensors(2)
Debug.Print PortsSerie(1)
Debug.Print PortsSerie(2)
If j = 3 Then
Debug.Print PortsSerie(3)
End If
GoTo Debut
End Sub
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 5 mai 2011 à 10:12
Salut,
pourquoi ne pas préféré un ArrayList à un tableau de String ?
En effet cet objet va gérer seul le redimensionnement et possèdes des fonctionnalités intéressantes, comme Contains(object) qui te permettra de savoir si un élément a déjà été inscrit dans la liste, pour pas l'insérer 2x.
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 5 mai 2011 à 12:33
Bonjour,
Je ne peux rester insensible à ton code pour quelques raisons :
- Tu déclares que tu codes en VB6, donc pas d'ArrayList, mais Collection.
- ET SURTOUT, quelque chose d'horrible, que même les pires productions de films ne laisseraient pas passer, 2 GOTO !!!
Dans ton cas, tes GOTOs peuvent se remplacer par une fonction et un Exit for.
En VB (et quelques autres langages) quand on commence à mettre des GOTO et GOSUB, c'est que l'on a mal codé (à l'exception des ON ERROR GOTO).
Donc, il faut repenser ton code et voir où le problème s'est posé.