Probleme fonction split

pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007 - 23 nov. 2006 à 10:53
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 23 nov. 2006 à 19:57
Bonjour à tous,

J'essai désespérement d'utiliser la fonction split pour extraire les différentes valeurs d'un fichier texte. Ca ne marche pas, j'ai le message d'erreur "fonction non définie" sur la fonction split.

Quelqu'un peut il me dire pourquoi ?
Voici mon code :

Private Sub Command1_Click()
Dim fso As FileSystemObject
Dim readtxt As TextStream
Dim strLine As String


Set fso = CreateObject("scripting.filesystemobject")
Set readtxt = fso.OpenTextFile("G:\dw_ident.txt")

          strLine = readtxt.ReadLine
          MsgBox strLine


          tabl = Split(strLine, ";") 
        
readtxt.Close
Set fso = Nothing
Set readtxt = Nothing
End Sub

14 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
23 nov. 2006 à 11:00
Salut

dim tabl() as string
tabl = Split(strLine, ";") 

 Drikce 06
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 11:06
Salut et merci de ta réponse.

Malheureusement ça ne marche pas, j'ai toujours la même erreur.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 nov. 2006 à 11:10
Salut
Si ça ne fonctionne pas, c'est que tu n'es pas sous VB6.
Vérifie aussi si tu n'as pas toi même défini une fonction qui porte ce nom "Split" , ce qui provoquerait un conflit.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 11:15
Désolé j'ai oublié de le préciser je suis sous VB5.

Mais dans ce cas si cette fonction ne marche pas sous VB5, existe t-il un équivalent à cette fonction split?
0

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

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
23 nov. 2006 à 11:21
Effectivament je pense que sous VB5 la fonction split n'existe pas! Sinon essai voir de passer par InStr si elle existe bien sur!

 Drikce 06
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
23 nov. 2006 à 11:24
Mais bon si tu utilises ça il va falloir jongler pour avoir ce que tu veux!

 Drikce 06
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 11:32
Apparement la fonction InStr existe ce qui pourrait fonctionner.

Par contre sur d'autres lignes de mon fichier texte j'ai des données séparées par une tabulation, je ne pourrais donc pas les réccuperer en utilisant InStr.

Quelqu'un a t-il une idée?
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 11:49
Je reviens sur ce que j'ai dit, la fonction InStr peut détecter la position d'une tabulation.
Je devrais pouvoir me débrouiller avec tout çà.

Si vous avez des solutions plus simples n'hésitez pas.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
23 nov. 2006 à 11:51
Sous VB5, tu n'auras pas le choix que de créer ta propre fonction Split.
En recherchant sur le site, tu trouveras sûrement plusieurs codes déjà fait.

Voici une façon de faire qui n'est probablement pas la seule ou la plus rapide
En recherchant le site, tu en trouveras certainement d'autres

'Appel de la fonction
    Dim Tablo() As String
    Tablo = MonSplit(Text1, " ")

Private Function MonSplit(strTemp As String, Délimiteur As String)
    Dim I As Integer, J As Integer
    Dim MonTexte() As String
               
    J = 0
    ReDim MonTexte(J)
   
    For I = 1 To Len(strTemp)
        If Mid(strTemp, I, 1) = Délimiteur Then
            J = J + 1
            ReDim Preserve MonTexte(J) 'preserve conserve les données du tableau
        Else
            MonTexte(J) = MonTexte(J) & Mid(strTemp, I, 1)
        End If
    Next
   
    MonSplit = MonTexte

End Function

MPi
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 12:04
Salut MPI, le code est intéressant mais le délimiteur est une tabulation et non un espace.
Je pense donc que je suis obligé d'utiliser la fonction InStr qui accepte pour argument VbTab
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 nov. 2006 à 13:42
La fonction Split n'étant pas une fonction "naturelle" de Windows (pas d'équivalent dans les fonctions de l'API), elle n'est  pour moi rien d'autre qu'un "faux confort" offert par VB6 par rapport à VB5.

Je l'ai remplacée depuis longtemps par ce qui convient, par rapport à un séparateur choisi :
- une fonction "comptemots" (qui détermine combien de mots sont séparés par un séparateur défini)
- une fonction "detmot" (dont le propos est de déterminer un mot de rang n dans une chaîne dont les "mots" sont séparés par un séparateur "défini"
- une fonction "rangmot" (qui détermine le rang d'un "mot" dans une chaîne où les mots sont séparés par un séparateur défini)

Et je m'en réjouis chaque jour car je note que, dans de nombreux de cas de figure; l'emploi de split fait passer par tokyo pour aller de Paris à Rome, alors que l'on ne cherche que plus simple (rang d'un mot.... mot correspondant à un rang)... et celà m'évite des tableaux alourdissants et bien inutiles...

Au risque de me faire assassiner, je dirai que je n'utilise pas, non plus, le "confort" de la fonction Replace....

Tapez pas, s'il vous plait (vous auriez tort ...)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 nov. 2006 à 13:48
Regarde sur cette page, tu trouvera le code pour les quelques petites fonctions de manipulations de chaines de VB6, qui manque dans VB5

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
pimouz Messages postés 8 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 juin 2007
23 nov. 2006 à 15:36
Merci à tous pour votre aide.

Je suis arriver à mes fins en utilisant la fonction InStr et quelques petites fonctions de chaines.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 nov. 2006 à 19:57
Salut,

pense à valider la réponse qui t'as aidé.

Sinon, voici un "MultiSplit" (merci PCPT) :

Function MultiSplit(ByVal sStr As String, bKeepSepar As Boolean, ParamArray aArray()) As String()
'   Len des arguments aArray  doivent être de 1, sStr ne doit pas être vide
'    sStr        -> chaîne à parser
'    bKeepSepar  -> garder ou non les caractères de référence
'   aArray      -> tableau des références  (len= 1)
    Dim sCol As New Collection
    Dim sChar As String, sLeft As String
    Dim bFound As Boolean
    Dim aRes() As String
    Dim i As Integer, j As Integer
    i = 0
    
    While LenB(sStr) > 0
        i = i + 1
        sChar = Mid$(sStr, i, 1)
        bFound = False
        For j = LBound(aArray) To UBound(aArray)
            If sChar = CStr(aArray(j)) Then bFound = True: Exit For
        Next j
        If bFound Then
            sLeft = Left$(sStr, i - 1)
            If LenB(sLeft) > 0 Then sCol.Add sLeft
            If bKeepSepar Then sCol.Add sChar
            sStr = Right$(sStr, Len(sStr) - i)
            i = 0
        ElseIf sChar = vbNullString Then
            sCol.Add sStr
            sStr = vbNullString
        End If
    Wend
    ReDim aRes(sCol.Count - 1)
    For i = 1 To sCol.Count
        aRes(i - 1) = sCol.Item(i)
    Next i
    MultiSplit = aRes
    
    Set sCol = Nothing
    Erase aRes
End Function

' EXEMPLE  D'UTILISATION
Private Sub Form_Load()
    Dim a$(), i%
    a = MultiSplit( _
          "Function  MultiSplit(ByVal sStr As String, bKeepSepar As Boolean, ParamArray aArray()) As  String()", _
          True, "(", ")", ",", " ")
          
    For i = 0 To UBound(a)
        Debug.Print a(i)
    Next i
End Sub

~<small> Mortalino </small>~

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
Rejoignez-nous