Pb avec split

cs_lacourge Messages postés 21 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 27 mars 2007 - 4 janv. 2007 à 20:56
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 5 janv. 2007 à 13:12
salut
je dois remplir une base de données à partir d'un fichier texte d'ou je récupère une chaine de 4 ou 5 valeurs séparées par des ":"
c'est la dernière qui est parfois absente (même avec un if), il me met "indice en dehors de la plage"
voici mon code (vb6)
Open Fichier For Input As #1
    Do While Not EOF(1)                ' Lire le fichier jusqu'à la fin de celui-ci
    Line Input #1, chaine
        tbl = Split(chaine, ":")
        With AdodcArbo.Recordset
            .AddNew
            .Fields("Id") = tbl(0)
            .Fields("PARENTID") = tbl(1)
            .Fields("Ref") = tbl(2)
            .Fields("Des") = tbl(3)
            
            If tbl(4) <> "" Then           'C'EST ICI QU'EST LE PB
            .Fields("RefConst") = tbl(4)
            End If
            .Update
        End With
    Loop
    Close #1

Est-ce que quelqu'un aurait une idée?
D'avance merci

8 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 janv. 2007 à 21:05
Salut,

essaie comme ceci :    If tbl(UBound(tbl)) <> vbNullString Then

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 janv. 2007 à 21:07
Ben ma foi !...
T'aurait pas une petite idée, toi ?
Tu as pourtant écrit : "une chaine de 4 ou 5 valeurs "

et alors : quand il n'y en a que 4, la 4ème serait dans tabl(3) et.....à quoi correspondrait donc tabl(4) ??? T'as une idée ? VB n'en a pas, lui ...

Regarde dans ton aide en ligne ce qu'est Ubound.... et reviens vers nous si encore nécessaire
0
cs_lacourge Messages postés 21 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 27 mars 2007
4 janv. 2007 à 23:32
salut mortalino
j'avais fait plusieurs essais avant d'envoyer ce post mais avec UBound, il m'inscrit deux fois la quatrième valeur lorsque la cinquième est absente.
j'ai essayé une autre méthode avec InStr.
je te remercie de m'avoir répondu.

quand à l'autre interlocuteur: je me félicite que tu connaisses la réponse et que tu aies des leçons à donner mais sache si l'on peut encore t'apprendre quelque chose que ceux qui pose des questions n'ont pas tous ta science et ne sont pas tous malhonnète à vouloir qu'on leur fasse leur code. Le peu que j'ai indiqué dans ma question m'a demandé beaucoup de temps et de recherche (tu peux vérifier comme visiblement tu n'as pas grand-chose à faire, je pose peu de question depuis deux ans pour mon programme parce que j'essaie, je travaille et je cherche). Il se peut également qu'après avoir passé du temps et beaucoup cherché, on demande de l'aide alors qu'on n'est pas très loin d'une solution, ce qu'on ne peut savoir que lorsque l'on a trouvé.
s'il faut lire le réglement avant de poser une question, peut-être faudrait-il en intaurer un avant de répondre encore que le terme répondre soit indigne de certaines remarques qui n'intéressent que celui qui les expriment.
note bien mon nom: à l'avenir, je préfère pas de réponse plutôt qu'une bonne de toi.    
0
cs_lacourge Messages postés 21 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 27 mars 2007
5 janv. 2007 à 01:42
je rectifie:
Quand à l'autre interlocuteur: je me félicite que tu connaisses la réponse et que tu aies beaucoup de leçons à donner du haut de la haute opinion que tu as de toi, de ton savoir et de ta subtilité mais sache si l'on peut encore t'apprendre quelque chose que ceux qui réclame de l'aide (réclamer de l'aide pour trouver de l'aide, pourquoi pas?) n'ont pas tous ta science et ne sont pas tous malhonnête à vouloir qu'on leur fasse leur code. Le peu (chacun fait ce qu'il peut avec ce qu'il a, il n'y a pas de honte à savoir peu et à chercher à progresser(à moins que le forum n'ait pour fonction que d'exhiber les génies), tout le monde ne naît pas génie comme toi, mais qui sait, peut-être, avec des conseils et des soutiens comme toi, dans cent ans ...) de code que j'ai écrit dans ma question ma demandé beaucoup de temps, de travail et de recherche. Comme visiblement tu n'as pas grand-chose à faire à part scruter le forum à la recherche de fraude en tout genre ou de moral à faire, tu peux vérifier que je pose peu de question (et pour cause) depuis deux ans que je travaille sur mon programme (et pour cause également). Il se peut également qu'après avoir beaucoup cherché et travaillé, le fait de demander ou de simplement discuter avec d'autres programmeurs dont tu ne fais pas parti quoique tu participes au forum et aux sources (s'il ne faut pas surestimer, il ne faut pas plus tout dénigrer ni tout insulter) permet parfois de trouver des idées qui permettent de résoudre son problème et de s'apercevoir (quand on ne tombe pas sur des oisifs comme toi) qu'on n'était pas loin de la solution.
S'il faut lire le règlement avant de poser une question, peut-être faudrait-il en instaurer un avant de répondre encore que ce soit insulter le terme et l'action de répondre que de l'associer à des choses comme la tienne qui n'intéressent et n'apportent qu'à ceux s'en soulagent.
je n'indique pas ma solution pas très excellente à mon goût mais qui me suffira et qui me permet d'avancer un peu (çà te permettra si je m'exprime à nouveau dans le forum, peut-être, dans quelques années, d'exhiber ta science et de déverser ton ironie sur le manque d'optimisation de mon misérable code): ceci associé à ta réponse des plus judicieuses permettra à ceux qui feront des recherches dans le forum de perdre leur temps comme toi à aller visiter ta réponse inutile et stérile ainsi que d'avoir une réponse en moins à leur recherche (à rajouter aux questions sans réponses) plutôt que d'avancer dans leur problème.
si tu avais eu des professeurs comme toi, aujourd'hui, tu ne saurais même pas lire et écrire! Continu de te faire du bien!
En clair, ravale ta morgue!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 janv. 2007 à 08:58
Hello All

[auteurdetail.aspx?ID= 488952 lacourge]
Si tu as trouvé une solution, je trouve dommage de ne pas la faire partager. Qu est ce qui t'en empêche?
Après tout le Forum est un peu là pour cela.

En revanche pour en revenir à ton problème.
L'erreur : Indice en dehors de la plage survient (le plus souvent) lorsque tu fais appel à un indice de tableau qui n'existe pas.

Je t'expliques ce qu'à voulu te dire [auteurdetail.aspx?ID=615490 jmfmarques]
Tu dis toi meme que tu récupère une chaine de 4 ou 5 valeurs.

Exemple 1:2:3:4 et 1:2:3:4:5

Le resultat de la Fonction Split sera alors Soit:
    tbl(0) = 1        

    tbl(1) = 2        

    tbl(2) = 3

    tbl(3) = 4

Soit

    tbl(0) = 1        
    tbl(1) = 2        
    tbl(2) = 3
    tbl(3) = 4
    tbl(4) = 5

Hors si tu récupère 4 valeurs et que tu essaie de taper tbl(4) cela te donnera cette erreur car tbl(4) n'EXISTE PAS , ce n'est pas qu'il est egal à "" ou VbNullString, C'est Qu'il n'existe pas.

C'est donc pour cette raison que l'on te conseille de te pencher sur la fonction Ubound qui te renvoie la valeur de l'indice supérieur d'un tableau.
Donc pour en revenir à ton exemple:

If tbl(4) <> "" Then .Fields("RefConst") = tbl(4)

Ceci n'est possible QUE si Ubound(tbl) > = 4 .. et hopSoit : If UBound(tbl) >4 Then .Fields("RefConst") tbl(4)

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_lacourge Messages postés 21 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 27 mars 2007
5 janv. 2007 à 11:56
réponse acceptée:
salut
essaye avec ubound de comparer sa valeur avec celle de tbl(3).
si les 2 valeurs sont identiques, il n'y a pas de tbl(4).
@+
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 janv. 2007 à 12:12
Bonjour,

Je voudrais simplement dire à Lacourge que le seul professeur que j'aie eu en VB (à une époque à laquelle internet, google et les forums  n'existaient pas encore....et n'étaient même pas prévisibles), c'est moi-même, précisément ... Et, bien sûr, j'ai beaucoup bûché l'aide en ligne ...

Voilà !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 janv. 2007 à 13:12
Re-bonjour, lacourge,

M'est-il permis de te préciser (j'ai déjà eu l'occasion de l'exprimer dans une autre discussion), que de surcroît, personnellement, je préfère (pour des raisons de rapidité), ne pas utiliser Split et me servir directement de Instr et de Mid ?
Je te conseille (petit exercice intéressant) de t'exercer à le faire également... c'est enrichissant ... et tu n'as plus à te préoccuper d'un Ubound mal compris ou jamais "rencontré" ...
0
Rejoignez-nous