Questions sur SPLIT ???

Le
LE TROLL
Bonjour,

Je voudrais couper une chaîne pour la transformer en tableau, avec
plusieurs séparateur, or je ne sais pas si split accepte ça, ni comment le
faire, ou s'il y a d'autre fonctionnalités pour le faire, voici mon code
(par défaut split sépare à l'espace, mais j'ai aussi besoin de séparer aux
ascii 8, 10, 13):

s = Split(RichTextBox1.Text, , , vbTextCompare)

Je voudrais mettre, mais comment:

s = Split(RichTextBox1.Text, chr(8) OU chr(10) OU chr(13) OU chr(32) , ,
vbTextCompare)

???

--
Merci beaucoup, au revoir et à bientôt :o)

Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
andre.araste
Le #15412161
Bonjour

Lire une chaîne séparée avec Split, par exemple Georges,G,10.50

Dim Ligne As String = "Georges,G,10.5"
Dim Prenom As String
Dim Genre As Char
Dim Note As Single
Dim R(3) As String

R = Split(Ligne, ",")
Prenom = R(0) : Genre = R(1) : Note = R(2)

Il faudra ramener le tableau en une chaîne au bout à bout, les datas isolées
par un séparateur quelconque.
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

"LE TROLL" ug$
Bonjour,

Je voudrais couper une chaîne pour la transformer en tableau, avec
plusieurs séparateur, or je ne sais pas si split accepte ça, ni comment le
faire, ou s'il y a d'autre fonctionnalités pour le faire, voici mon code
(par défaut split sépare à l'espace, mais j'ai aussi besoin de séparer aux
ascii 8, 10, 13):

s = Split(RichTextBox1.Text, , , vbTextCompare)

Je voudrais mettre, mais comment:

s = Split(RichTextBox1.Text, chr(8) OU chr(10) OU chr(13) OU chr(32) , ,
vbTextCompare)

???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------




LE TROLL
Le #15412151
Bonjour,

Merci, mais a priori ce n'est pas ce que je cherche, ou je n'ai pas
compris, car en faisant:

dim s() as string
Dim cherche As String
cherche = "chr(8), chr(10), chr(13), chr(32)"
s = Split(RichTextBox1.Text, cherche, , vbTextCompare)

Ben ça donne une ligne continue...

Je vais faire autre chose alors, je vais remplacer tous les ascii 8, 10, et
13 par des ascii 32, après ça devrait marcher, car ensuite, j'épure les
blancs de chaque découpage.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" 461b5c3c$0$27370$
Bonjour

Lire une chaîne séparée avec Split, par exemple Georges,G,10.50

Dim Ligne As String = "Georges,G,10.5"
Dim Prenom As String
Dim Genre As Char
Dim Note As Single
Dim R(3) As String

R = Split(Ligne, ",")
Prenom = R(0) : Genre = R(1) : Note = R(2)

Il faudra ramener le tableau en une chaîne au bout à bout, les datas
isolées par un séparateur quelconque.
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

"LE TROLL" ug$
Bonjour,

Je voudrais couper une chaîne pour la transformer en tableau, avec
plusieurs séparateur, or je ne sais pas si split accepte ça, ni comment
le faire, ou s'il y a d'autre fonctionnalités pour le faire, voici mon
code (par défaut split sépare à l'espace, mais j'ai aussi besoin de
séparer aux ascii 8, 10, 13):

s = Split(RichTextBox1.Text, , , vbTextCompare)

Je voudrais mettre, mais comment:

s = Split(RichTextBox1.Text, chr(8) OU chr(10) OU chr(13) OU chr(32) , ,
vbTextCompare)

???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------








François Picalausa
Le #15412141
On 4月10日, 午前11:32, "LE TROLL"
        Bonjour,

    Je voudrais couper une chaîne pour la transformer en t ableau, avec
plusieurs séparateur, or je ne sais pas si split accepte ça, ni comment le
faire, ou s'il y a d'autre fonctionnalités pour le faire, voici mon code
(par défaut split sépare à l'espace, mais j'ai aussi besoi n de séparer aux
ascii 8, 10, 13):

s = Split(RichTextBox1.Text, , , vbTextCompare)

Je voudrais mettre, mais comment:

s = Split(RichTextBox1.Text, chr(8) OU chr(10) OU chr(13) OU chr(32) , ,
vbTextCompare)



Hello,

Split ne permet pas de le faire directement.
Néanmoins, il y a plusieurs solutions pour réaliser cette opà ©ration:
1/ Utiliser Replace, pour remplacer la série de séparateurs par un
seul, ensuite splitter. Eventuellement, copier les données sources
pour ne pas les altérer.
2/ Si les performances sont importantes, effectuer le parcours (à
l'aide d'une SAFEARRAY mappée sur la String, pour des performances
optimales), et effectuer les remplacements à la main. Cela évite le
parcours multiple de la chaine par replace, mais néanmoins, pour
quelques remplacements (probablement de l'ordre d'une dizaine, mais il
faudrait bencher pour en savoir plus), replace reste plus efficace.
Ensuite, splitter.
3/ Réécrire la fonction split avec plusieurs caractères.
Voici une méthode amusant (mais pas spécialement optimisée) pour le
faire:

Private Function MySplit(Data As String, Separators() As String,
SkipEmpty As Boolean, ByRef spv As Long) As String
Dim i As Long 'Parcours de la chaine
Dim spvBase As Long 'Index de début de parcours
Dim j As Long 'Parcours des séparateurs

Dim sepLBound As Long 'Bornes du tableau des séparateurs
Dim sepUBound As Long

Dim dataLength As Long 'Longueur de la chaine de caractères
Dim curentChar As String 'Caractère en cours d'analyse

If (spv > 0) Then
i = spv + 1
spvBase = spv + 1
Else
i = 1
spvBase = 1
End If

spv = -1
dataLength = Len(Data)
sepLBound = LBound(Separators)
sepUBound = UBound(Separators)

While (i <= dataLength And spv = -1)
curentChar = Mid$(Data, i, 1)
For j = sepLBound To sepUBound
'Pour le caractère en cours de lecture,
' vérifie s'il s'agit d'un séparateur
' et renvoie si c'est le cas la fin de l'entrée
If (curentChar = Separators(j)) Then
If (SkipEmpty) And (spvBase = i) Then
spvBase = spvBase + 1
Else
spv = i
End If
End If
Next j

i = i + 1
Wend

If (spv = -1) Then
MySplit = Right$(Data, dataLength - spvBase + 1)
Else
MySplit = Mid$(Data, spvBase, spv - spvBase)
End If
End Function

Private Sub Test()
Dim Data As String
Dim Separators() As String
Dim Split_Internal As Long
Data = ";;:Marcel;"

ReDim Separators(1 To 3)
Separators(1) = ":"
Separators(2) = ";"
Separators(3) = ","

While (Split_Internal <> -1)
'On prend le morceau suivant de Data, qu'on split par rapport
aux Separators
'On ne prend pas en compte les entrées vides
Debug.Print MySplit(Data, Separators, False, Split_Internal)
Wend

End Sub

François
LE TROLL
Le #15412111
Bonjour François,

Merci, j'ai en effet tout remplacé ascii 8, 10, 13, 32 = 32, et ça
marche...

Sinon c'est énorme, je peux aller jusqu'à 1.000.000 d'octets (bloqué à
ce stade par moi), ça fait 550 pages environ, c'est pour faire un chercheur
de répétitions de mots dans des livres.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"François Picalausa"
On 4?10?, ??11:32, "LE TROLL"
Bonjour,

Je voudrais couper une chaîne pour la transformer en tableau, avec
plusieurs séparateur, or je ne sais pas si split accepte ça, ni comment le
faire, ou s'il y a d'autre fonctionnalités pour le faire, voici mon code
(par défaut split sépare à l'espace, mais j'ai aussi besoin de séparer aux
ascii 8, 10, 13):

s = Split(RichTextBox1.Text, , , vbTextCompare)

Je voudrais mettre, mais comment:

s = Split(RichTextBox1.Text, chr(8) OU chr(10) OU chr(13) OU chr(32) , ,
vbTextCompare)



Hello,

Split ne permet pas de le faire directement.
Néanmoins, il y a plusieurs solutions pour réaliser cette opération:
1/ Utiliser Replace, pour remplacer la série de séparateurs par un
seul, ensuite splitter. Eventuellement, copier les données sources
pour ne pas les altérer.
2/ Si les performances sont importantes, effectuer le parcours (à
l'aide d'une SAFEARRAY mappée sur la String, pour des performances
optimales), et effectuer les remplacements à la main. Cela évite le
parcours multiple de la chaine par replace, mais néanmoins, pour
quelques remplacements (probablement de l'ordre d'une dizaine, mais il
faudrait bencher pour en savoir plus), replace reste plus efficace.
Ensuite, splitter.
3/ Réécrire la fonction split avec plusieurs caractères.
Voici une méthode amusant (mais pas spécialement optimisée) pour le
faire:

Private Function MySplit(Data As String, Separators() As String,
SkipEmpty As Boolean, ByRef spv As Long) As String
Dim i As Long 'Parcours de la chaine
Dim spvBase As Long 'Index de début de parcours
Dim j As Long 'Parcours des séparateurs

Dim sepLBound As Long 'Bornes du tableau des séparateurs
Dim sepUBound As Long

Dim dataLength As Long 'Longueur de la chaine de caractères
Dim curentChar As String 'Caractère en cours d'analyse

If (spv > 0) Then
i = spv + 1
spvBase = spv + 1
Else
i = 1
spvBase = 1
End If

spv = -1
dataLength = Len(Data)
sepLBound = LBound(Separators)
sepUBound = UBound(Separators)

While (i <= dataLength And spv = -1)
curentChar = Mid$(Data, i, 1)
For j = sepLBound To sepUBound
'Pour le caractère en cours de lecture,
' vérifie s'il s'agit d'un séparateur
' et renvoie si c'est le cas la fin de l'entrée
If (curentChar = Separators(j)) Then
If (SkipEmpty) And (spvBase = i) Then
spvBase = spvBase + 1
Else
spv = i
End If
End If
Next j

i = i + 1
Wend

If (spv = -1) Then
MySplit = Right$(Data, dataLength - spvBase + 1)
Else
MySplit = Mid$(Data, spvBase, spv - spvBase)
End If
End Function

Private Sub Test()
Dim Data As String
Dim Separators() As String
Dim Split_Internal As Long
Data = ";;:Marcel;"

ReDim Separators(1 To 3)
Separators(1) = ":"
Separators(2) = ";"
Separators(3) = ","

While (Split_Internal <> -1)
'On prend le morceau suivant de Data, qu'on split par rapport
aux Separators
'On ne prend pas en compte les entrées vides
Debug.Print MySplit(Data, Separators, False, Split_Internal)
Wend

End Sub

François
Publicité
Poster une réponse
Anonyme