Problème avec SPLIT [Résolu]

Malokoxis 65 Messages postés lundi 3 janvier 2011Date d'inscription 3 mai 2017 Dernière intervention - 9 nov. 2015 à 19:49 - Dernière réponse : Malokoxis 65 Messages postés lundi 3 janvier 2011Date d'inscription 3 mai 2017 Dernière intervention
- 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 ?

merci
Afficher la suite 

3 réponses

Répondre au sujet
ucfoutu 18027 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 19 janvier 2018 Dernière intervention - 9 nov. 2015 à 21:04
0
Utile
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 ?
Commenter la réponse de ucfoutu
ucfoutu 18027 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 19 janvier 2018 Dernière intervention - Modifié par ucfoutu le 9/11/2015 à 21:29
0
Utile
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.
Commenter la réponse de ucfoutu
Malokoxis 65 Messages postés lundi 3 janvier 2011Date d'inscription 3 mai 2017 Dernière intervention - Modifié par Malokoxis le 9/11/2015 à 23:37
0
Utile
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
Commenter la réponse de Malokoxis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.