Tableau avec variables exclusivement différentes

InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 5 mai 2011 à 09:17
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Derniè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:

COM1
COM1
COM1
COM1
COM1
COM2
COM1
COM1
COM1
COM1
COM1
COM2
COM3

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

HUMIDITY_1=T341101COM1salle_plasma09961537
HUMIDITY_2=T341102COM1milieu09962111
HUMIDITY_3=T341103COM1fond09962115
HUMIDITY_4=T341104COM1gauche09962112
HUMIDITY_5=T341105COM1droite09962110
HUMIDITY_6=T731006COM2ordinateur
TEMPERATURE_1=T341101COM1salle_plasma09961537/iTEMPERATURE_2=T341102COM1milieu09962111
TEMPERATURE_3=T341103COM1fond09962115
TEMPERATURE_4=T341104COM1gauche09962112
TEMPERATURE_5=T341105COM1droite09962110
TEMPERATURE_6=T731006COM2ordinateur
PRESSURE_1=T731006COM1ordinateur
OXYGEN_1=2001RSMCh1COM3azote
/i

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

4 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
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.
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
5 mai 2011 à 12:01
bah je connaissai pas ca ^^
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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é.

Mon site
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 13:31
Ah oui désolé, j'avais pas vu que c'était du VB6, au temps pour moi.
Et les GOTO ... ça me rappelle quand je "codais" sur CPC ><
0
Rejoignez-nous