pimouz
Messages postés8Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 juin 2007
-
23 nov. 2006 à 10:53
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
pimouz
Messages postés8Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
pimouz
Messages postés8Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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....
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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