OVH Cloud OVH Cloud

Truc con ...

9 réponses
Avatar
Dom
Bonjour,

Ds un projet VB6, je découpe une chaine de caractères (nom de fichier)
suivant le caractère ".". J'utilise donc la fonction split().
Toutefois, j'ai fait qq modifs ds mon code et maintenant mon code pourtant
simple de "splitage" me retourne l'erreur: <indice en dehors de la plage>
pour UBound(St1)


q = 0
While Dir(FolderEnv) <> ""
Chaine = Dir(FolderEnv)
St1() = Split(Chaine, ".")
For q = 1 To UBound(St1)
MsgBox St1(q)
Next q
Wend

St1() est déclaré en Dim St1(). Chaine est déclaré en Dim Chaine as string.
C'est très énervant.
Une idée du pkoi ?

Merci
Dom

9 réponses

Avatar
Bul
bonjour,
la séquence est faite même si
chaine = vbnullstring
St1() = Split(Chaine, ".")
For q = 1 To UBound(St1)
MsgBox St1(q)
Next q
donc ubound(st1)=0

chaine=Dir(FolderEnv)
While chaine <> ""
St1() = Split(Chaine, ".")
For q = 1 To UBound(St1)
MsgBox St1(q)
Next q
Chaine = Dir
Wend
ça devrait aller mieux
Avatar
Dom
Merci Bull de la réponse mais ce n'est pas ca.
Au moment ou j'arrive ds le split, je suis toujours certain que la chaine à
spliter est non nulle.
L'erreur n'est donc pas dû à une chaine nulle.
Autre idée ?

Dom
Avatar
Dom
Précision: je viens de remarquer qu'un autre split situé plus haut dans mon
code me retourne maintenant la même erreur <indice en dehors de la plage>
lorsque je passe dessus. Je n'ai rien touché à ce split là et il
fonctionnait sans pb jusque lors ... J'y perds mon latin ... Que se passe t
il ???
Dom
Avatar
Patrice Henrio
Es-tu sûr que le tableau obtenu par split commence à 1. de mémoire et sans
vérifier je crois qu'il commence à 0.
Je viens de vérifier c'est bien le cas.
Donc
For q = 0 To UBound(St1)
MsgBox St1(q)
Next q
Je pense que le problème arrive s'il n'y a pas de . donc le tableau ne
comporte que la case 0 et la boucle va de 0 à 1. Je ne suis pas sûr de ce
que je viens d'avancer mais c'est vers cela qu'il faut creuser en utilisant
diverse valeur d'une variable string.
"Dom" a écrit dans le message de news:

Précision: je viens de remarquer qu'un autre split situé plus haut dans
mon
code me retourne maintenant la même erreur <indice en dehors de la plage>
lorsque je passe dessus. Je n'ai rien touché à ce split là et il
fonctionnait sans pb jusque lors ... J'y perds mon latin ... Que se passe
t
il ???
Dom




Avatar
Patrice Henrio
Es-tu sûr que le tableau obtenu par split commence à 1. de mémoire et sans
vérifier je crois qu'il commence à 0.
Je viens de vérifier c'est bien le cas.
Donc
For q = 0 To UBound(St1)
MsgBox St1(q)
Next q
Je pense que le problème arrive s'il n'y a pas de . donc le tableau ne
comporte que la case 0 et la boucle va de 0 à 1. Je ne suis pas sûr de ce
que je viens d'avancer mais c'est vers cela qu'il faut creuser en utilisant
diverse valeur d'une variable string.
"Dom" a écrit dans le message de news:

Précision: je viens de remarquer qu'un autre split situé plus haut dans
mon
code me retourne maintenant la même erreur <indice en dehors de la plage>
lorsque je passe dessus. Je n'ai rien touché à ce split là et il
fonctionnait sans pb jusque lors ... J'y perds mon latin ... Que se passe
t
il ???
Dom




Avatar
Jean-Marc
Hello,

comme ça aucun soucis:

Private Sub Command1_Click()
Dim q As Integer
Dim st1() As String
Dim chaine As String

Dim folderenv As String

folderenv = "c:*.*"
q = 0
chaine = Dir$(folderenv)
While chaine <> ""

st1() = Split(chaine, ".")
For q = LBound(st1()) To UBound(st1())
MsgBox st1(q)
Next q
chaine = Dir$()
Wend
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."




"Dom" a écrit dans le message de
news:
Bonjour,

Ds un projet VB6, je découpe une chaine de caractères (nom de fichier)
suivant le caractère ".". J'utilise donc la fonction split().
Toutefois, j'ai fait qq modifs ds mon code et maintenant mon code pourtant
simple de "splitage" me retourne l'erreur: <indice en dehors de la plage>
pour UBound(St1)


q = 0
While Dir(FolderEnv) <> ""
Chaine = Dir(FolderEnv)
St1() = Split(Chaine, ".")
For q = 1 To UBound(St1)
MsgBox St1(q)
Next q
Wend

St1() est déclaré en Dim St1(). Chaine est déclaré en Dim Chaine as


string.
C'est très énervant.
Une idée du pkoi ?

Merci
Dom




Avatar
Vincent Guichard
Dom a écrit :
Bonjour,

Ds un projet VB6, je découpe une chaine de caractères (nom de fichier)
suivant le caractère ".". J'utilise donc la fonction split().
Toutefois, j'ai fait qq modifs ds mon code et maintenant mon code pourtant
simple de "splitage" me retourne l'erreur: <indice en dehors de la plage>
pour UBound(St1)


q = 0
While Dir(FolderEnv) <> ""
Chaine = Dir(FolderEnv)
St1() = Split(Chaine, ".")
For q = 1 To UBound(St1)
MsgBox St1(q)
Next q
Wend

St1() est déclaré en Dim St1(). Chaine est déclaré en Dim Chaine as string.
C'est très énervant.
Une idée du pkoi ?

Merci
Dom





Essaie d'enlever les parenthèses après St1:
St1 = Split(Chaine, ".")

Et défini de préférence St1 comme tableau de chaine (Dim St1() as String)

Vincent Guichard
Avatar
Il y a toujours la possibilité de donner

Option base 1

dans le module que tu programme...
ainsi tous tes array commenceront a l'index 1
Avatar
Patrice Henrio
Et non, même avec option base 1, Split renvoie un tableau indexé à partir de
0.

a écrit dans le message de news:
093501c4a14d$1355cb80$
Il y a toujours la possibilité de donner

Option base 1

dans le module que tu programme...
ainsi tous tes array commenceront a l'index 1