Malokoxis
Messages postés83Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention22 février 2021
-
9 nov. 2015 à 19:49
Malokoxis
Messages postés83Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention22 février 2021
-
9 nov. 2015 à 23:35
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 ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 9 nov. 2015 à 21:04
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 ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 Modifié par ucfoutu le 9/11/2015 à 21:29
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.
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