Problème avec SPLIT [Résolu]

Signaler
Messages postés
83
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
22 février 2021
-
Messages postés
83
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
22 février 2021
-
Bonjour,

J'ai une chaine contenant 15 caractères et je souhaite découper cette chaine pour que chaque index de VarSys me donnent un caractère de la chaine.

Voilà le code que j'ai écrit (la première ligne est le contenu de chainedec) :

'STS , Systeme, , SCAN, , 100000000000000,11111111111000001, , 0, 1, 0, 0

    variable = Split(Chainedec, ",")
    VarSYS = Split(variable(5), "")
    VarGRP = Split(variable(6), "")

    'SYS=15 0à14
    For i = 1 To Len(variable(5))

        If VarSYS(i) = "0" Then ImgSYS(i - 1).Visible = True Else ImgSYS(i - 1).Visible = False
    Next i
    
    If VarSYS(0) = "0" Then lblSys.Visible = True Else lblSys.Visible = False
    If VarSYS(11) = "0" Then lblATT.Visible = True Else lblATT.Visible = False
    If VarSYS(12) = "0" Then lblPRI.Visible = True Else lblPRI.Visible = False
    If VarSYS(13) = "0" Then ImgClef.Visible = True Else ImgClef.Visible = False
    If VarSYS(14) = "0" Then ImgBatt.Visible = True Else ImgBatt.Visible = False
    
    If VarGRP(0) = "0" Then lblGrp.Visible = True Else lblGrp.Visible = False


Mais après l'index 1, j'ai une erreur d'index hors limite alors que la chaine fait bien 15 caractères ( et le nombre de caractère est fixe).

Est-ce que Split peut être utilisé sans caractère délimiteur (VarSYS = Split(variable(5), "")) ?
Est-ce que le premier index de la liste variable qui en découle est 0 ?

merci

3 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Bonjour,
on ne peut éclater (split) sur rien !
Split(variable(5), "") et Split(variable(6), "") ont un ubound = 0
et donc
If VarSYS(i) est forcément hors limite dès que i > 0 !
Décris avec plus de précision ce que tu veux faire exactement et tu auras ta solution précise.
Je crois deviner que, dans ton exemple, tu veux décomposer "100000000000000" en "1", "0","0", etc ...
est-ce vraiment le cas ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Bon ...
Je suis fiévreux et dois donc me mettre au lit ===>>>
regarde ce que fait ceci. Analyse et comprends, puis utilise à ta guise
 chainedec = "STS,Systeme,,SCAN,,abracadabra,11111111111000001, , 0, 1, 0, 0"
montableau = Split(StrConv(Split(chainedec, ",")(5), vbUnicode), Chr(0))
For i = 0 To UBound(montableau) - 1
MsgBox montableau(i)
Next

bonne nuit

EDIT :
ce que tu pourrais d'ailleurs écrire également ainsi :
chainedec = "STS,Systeme,,SCAN,,abracadabra,11111111111000001, , 0, 1, 0, 0"
Dim titi() As Byte
titi = StrConv(Split(chainedec, ",")(5), vbFromUnicode)
For i = 0 To UBound(titi)
MsgBox Chr(titi(i))
Next

avec le même résultat.
Bon ... au lit sans attendre, maintenant.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
83
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
22 février 2021
2
Ton code :
sectionne la chaine selon le caractère "," en limitant à 5 caractères
convertit la chaine en unicode
sectionne la chaine selon le caractère char(0)

Je n'avais pas pensé à mettre le caractère sous cette forme.

Merci pour ton aide.

Voici donc mon nouveau code :
    variable = Split(Chainedec, ",")
    VarSYS = Split(StrConv(variable(5), vbUnicode), Chr(0))

   For i = 1 To 10

        If VarSYS(i) = "1" Then ImgSYS(i).Visible = True Else ImgSYS(i).Visible = False
    Next i
    
    If VarSYS(0) = "1" Then lblSys.Visible = True Else lblSys.Visible = False
    If VarSYS(10) = "1" Then ImgSYS(0).Visible = True Else ImgSYS(0).Visible = False
    If VarSYS(11) = "1" Then lblATT.Visible = True Else lblATT.Visible = False
    If VarSYS(12) = "1" Then lblPRI.Visible = True