SPLIT: comment afficher les séparateurs ?

Résolu
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 28 sept. 2004 à 15:42
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004 - 30 sept. 2004 à 12:34
Bonjour à tous
J'utilise la fonction SPLIT et un séparateur comme £. Ca marche bien, mais je voudrais que le séparateur apparaisse dans le fichier de sortie. Je pensais simplement le dédoubler, ££, mais n'y-a-t'il pas une solution plus élégante ?
Merci.

16 réponses

Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
29 sept. 2004 à 16:18
Bah je mets l'énoncé non-typé avec le précédent. Je te remet mon code avec des commentaires pour que tu comprenne mieux:
Dim tabEntry() As String 'split de ton entrée
Dim tabCat() As String 'tableau final aved 1 case = 1 type
Dim Idx As Integer
Dim Offset As Integer

tabEntry = Split(rtxtbox1.Text, vbNewLine) 'rajout de cette ligne
Offset = 0
For Idx = 0 To UBound(tabEntry) 'parcour du split et 
'correction de la grosse connerie que j'avais mis :)If InStr(1, tabEntry(Idx), "£1") 0 And InStr(1, tabEntry(Idx), "£2") 0 Then 'si c'est un énoncé non-typé
tabCat(Offset) = tabCat(Offset) & tabEntry(Idx) 
'ajout de l'énoncé courant avec le précédent
Else 'sinon
Redim Preserve tabCat(Offset + 1) 'on augmente le tableau de 1
tabCat(Offset) = tabEntry(Idx) 'on y met le nouvel énoncé
Offset = Offset + 1
'on sauvegarde le nouveau dernier index de notre tableau
End If
Next Idx 'on boucle


Si ça va toujours pas tu sais quoi faire :)
3
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
28 sept. 2004 à 15:47
Lut.
De toute façon je crois pas qu'en le dédoublant ça résolve ton problème, ça devrai te faire des cases de ton tableau vide. Il faut qu'au moment où tu parcoures ton tableau, entre chaque case tu mettes le séparateur. A+
0
.. parce qu'en fait, j'utilise deux séparateurs différents que je dois splitter après:

tsplit1()=split(txtbox1.text, "£1")

for i = 0 to ubound(tsplit1)
tsplit2()=split(tsplit1(i), "£2")
for j = 0 to ubound(tsplit2)
print #1, tsplit(j)
next j
next i
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
28 sept. 2004 à 16:44
Je vois pas trop ton problème, si ma sugestion ne te convient pas, précise un peu ton problème.
Ma sugestion: au moment d'écrire dans ton fichier avec:
print #1, tsplit(j)

tu rajoute le séparateur que tu veux:
print #1, tsplit(j) & "£"

J'attends ta réponse.
A+
0

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

Posez votre question
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
28 sept. 2004 à 16:56
en fait, en entrée, j'ai ceci:
£1 je suis un homme
£2 je suis une femme
£1 je suis vieux
£2 je suis vieille

Je voudrais séparer d'un coté les £1 et de l'autre £2, soit dans deux fichiers texte, soit dans deux textbox, pour faire des analyses différentes.

Le code que j'ai fait sépare bien tout, mais sans donner la distinction £1-£2.
Car on pourrait aussi avoir:
£1 je suis un homme. Je suis vieux.
£2 je suis une femme.
£1 j'habite bruxelles.
£2 je suis vieille.
(avec un split sur "." en plus)

Ceci dit, la solution est peut-être plus comme ceci:
tsplit()=split(rtxtbox1.text, "£")
tsplit().SelStart=tsplit().Find("1 * .") pour l'exemple1
ou
tsplit().SelStart=tsplit().Find("1 * 2") pour l'exemple2

merci déjà en tout cas
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
28 sept. 2004 à 17:05
Vu que tu utilise une TextBox (ou Rich peu importe) et que la propriété MultiLine = True, tu peux déjà récupérer un tableau de toute ton entrée avec un Split(rtxtbox1.Text, vbNewLine) et les fameuse infos (£1 ou £2) dont tu as besoin seront là. Après dans chaque case tu fait un InStr pour savoir si la string est du type £1 ou £2 et tu peux faire le traitement que tu veux après dessus.
On se rapproche de la solution là??? :)
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
28 sept. 2004 à 17:21
Y a du bon, sauf que parfois il y a
£1 blabla....
blabla
£2 blabla

et donc peut-être que vbNewLine est pas suffisant ?
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
28 sept. 2004 à 17:26
Bah ça dépend,
£1 blabla....
blabla <- qu'est-ce que tu veux en faire?
£2 blabla
Grâce aux InStr tu vois de quel type est ta ligne et si elle est aucun des deux tu en fait ce que tu veux.
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
29 sept. 2004 à 09:25
1) dans le cas de
£1 blabla..
blabla ---> cette ligne doit être en £1

2) je me méfie d'INSTR, car dans le cas
   £1 je suis 1 homme

on aura je pense le découpage suivant:
   £1 je suis
   1 homme
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
29 sept. 2004 à 09:29
désolé, je voulais dire, si j'ai
 £2 je suis 1 homme

j'aurai
£2 je suis 1 homme

dans les deux catégories
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
29 sept. 2004 à 09:55
Salut.
Tu as surement voulu dire que tu te méfiais de Split plutôt que InStr, mais tu n'as pas à t'inquiéter si tu lui donne "£1" comme délimiteur il ne tiendra pas compte du "1", pareil pour InStr il ne cherchera que le "£1" (fais des petits tests quand tu as des doutes).
Pour le problème des lignes sans "£1" ni "£2", tu considères que si tu ne trouve pas de type, et bien la ligne est du même type que la case précédente de ton tableau (sauf dans le cas où la 1ère ligne est sans type!). Tu peux refaire un tableau où tout est bien rangé.

Dim tabEntry() As String 'split de ton entrée
Dim tabCat() As String 'tes catégories
Dim Idx As Integer
Dim Offset As Integer

Offset = 0
For Idx = 0 To UBound(tabEntry) - 1If InStr(1, tabEntry(Idx), "£1") 0 And InStr(1, tabEntry(Idx), "£2") 0 Then
tabCat(Offset) = tabCat(Offset) & tabEntry(Idx)
Else
Redim Preserve tabCat(Offset + 1)
tabCat(Offset) = tabEntry(Idx)
Offset = Offset + 1
End If
Next Idx



Attention ce code ne marche pas dans le cas où la première ligne n'est d'aucun type (retouche le si tu as besoin il est en open source :big) ). Après tu devrais avoir un tableau bien rangé.
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
29 sept. 2004 à 15:29
Encore merci pour ton aide
Mais dans ton code, que j'ai +/- compris, on ne distingue pas, me semble-t-il les énoncés non-typés, qui doivent aller dans un fichier spécifique.
Voici ce que je tente et qui semble bien marcher:
[Code]tabEntry()=split (txtbox1.text, "£")
for i = 0 to ubound(tabEntry)
if Instr (1, tabEntry(i), "1") <> 0 then
print 1
end if
if Instr (1, tabEntry(i), "2") <> 0 then
print 2
end if
next i
/Code]
Pour l'instant ca a l'air d'aller mais je ne me suis pas encore frotté à des types imprévisibles genre £A qu'il faut distinguer de £H..
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
29 sept. 2004 à 17:07
bien d'accord, mais c'est deux tableaux (£1-£2) que je devrais plutôt faire.
Du coup, ma solution, un peu simpliste d'accord, me permet de faire les tests que je veux, énoncé par énoncé, sans passer par les tableaux £1-£2.
Ceci dit, je garde ta solution pour un autre contexte: afficher un texte avec £1-£2 bien rangé.
Autre chose, je n'y suis pas encore et je ne voudrais pas abuser, mais comment faire dans le cas où l'utilisateur choisit lui-même ce qui suit le £ (£a ou £ b). Dois-je inclure un inputbox pour demander à l'utilisateur d'indiquer son choix et faire un truc du genre
if (instr(1,tabE(i),"£ & inputbox.text") etc

ou lire le caractère qui suit £ en lui attribuant la lettre choisie ?
if (instr(1,tabE(), "£*")

Si jamais tu as une idée sous la main..
Encore bien merci
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
29 sept. 2004 à 17:13
Bah en fait au fur et à mesure ou je te réponds, j'ai de plus en plus de mal à voir ce que tu veux faire. Y me faudrais une explication détaillée et complète (quel but, comment tu comptes t'y prendre, quelles sont les contraintes, etc...) pour que je te dise comment je vois la chose. Ch'ui tout embroullié là :big)
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
30 sept. 2004 à 10:45
Oups, en relisant ce que j'ai écris, je me rends compte que c'est pas clair. Je voulais absolument n'utiliser que SPLIT pour séparer les énoncés £1 des énoncés £2, mais je me rends compte en fait que split ne fournit qu'un tableau d'une colonne, alors que je dois séparer le flux en deux, pour le traiter différement:
£1 Blabla
Bloblo
£2 Blabla
£1 Blibli

doit donner
fichier 1
£1 Blabla
Bloblo
£1 Blibli

et fichier 2
£2 Blabla

alors que ta solution donnerait si j'ai bien compris:
£1 Blabla Bloblo
£2Blabla
£1 Blibli

ce qui me sera utile pour l'affichage propre du texte.
En fait, j'ai cru qu'il suffisait d'afficher les séparateurs de split (£), pour les retraiter à nouveau par split (1, 2). Mais donc, Split n'est pas suffisant, et comme tu l'as fait remarquer, Instr marche très bien pour ça.
Merci encore
0
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
30 sept. 2004 à 12:34
Ah ouais je comprends mieux. Tu peux reprendre le code du réponse accepté et rajouter un tableau pour avoir un tableau pour chaque type, mais tu peux aussi t'en passer et écrire directement dans des fichiers ou des textbox, ils étaient juste là à titre d'exemple.
0
Rejoignez-nous