Split, VB.net et VB6 [Résolu]

Signaler
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Bonjour,

Une très récente discussion sur le forum VB6 me conduit à poser la question suivante sur le forum VB.NET :

Sous VB6, lenmploi de Split me permet d'extraire les chaînes "mot1", "mot2" et "mot3) de la chaine :
"mot1totomot2totomot3" en utilisant la chaîne "toto" comme séparateur.

Les questions :

Question: est-il possible, sous VB.NET, de faire la même chose en utilisant Split ?

----------question1 : si oui, avec quelle syntaxe (avec Split, pas autrement) ?
----------question2 : si non : quelqu'un saurait-il pourquoi VB.NET n'a pas inclus cette possibilité ?
---------------question2a : que faudrait-il alors utiser (autre que split) pour y parvenir sous VB.NET ?
---------------question2b : que devraient alors de préférence écrire sous VB6 ce qui ont l'intention de migrer un jour leur application vers VB.NET ?

Je serais particulièrement reconnaissant à ceux qui voudront bien répondre à ces questions de bien vouloir éviter tout exposé autre que purement technique.

Merci d'avance à ceux qui accepteraient de répondre.

23 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Oui, tu peut aussi faire ca en .net
TaString.IndefOf, TaString.Lenght, TaString.SubString






__________
Kenji
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Salut,

Ne plus utililiser le Split directement comme en vb6.
Il faut du bon framework :





Dim TaString As String = "Hello Word !!! Comment va tu jmf ???"
Dim TableauDeDestination As String() = TaString.Split(" "c),

----

(Coloration syntaxique automatique par Kenji)




__________
Kenji
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Ha pardon, j'ai sauté un truc.
Avec le "toto" ... je fait des testes et je te dis.






__________
Kenji
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Non apparament, ce n'est pas possilbe, on peut splitter avec plusieurs caractéres mais pas avec un mot.
Donc la solution est, on remplace les "toto" pas un caractere et on split avec ce caractere :



Dim TaString As String = "HellototoWordtoto!!!totoCommenttotovatototutotojmftoto???"
Dim TableauDeDestination As String() = TaString.Replace("toto", System.Convert.ToChar(0)).Split(System.Convert.ToChar(0)),

----

(Coloration syntaxique automatique par Kenji)







__________
Kenji
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Tu peux trouver la fonction Split dans le namespace Microsoft.VisualBasic. Mais elle n'a pas beaucoup d'interet. EN effet quel est l'interet de faire du VB6 sous .Net autant rester en VB6

Sinon pour rester dans le code .NET, il te faut utiliser la méthode Split implémentée par la classe string. Tu pourras trouver toutes les surcharges disponibles sur cette page : http://msdn2.microsoft.com/fr-fr/library/system.string.split(vs.80).aspx

Pour ton exemple ça donne TonTableau = TaChaine.Split("toto")

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Merci merci (je l'avais lu...)
Mais quid de la question finale (en réalité la finalite même de ce sujet) :
---------------question2b : que devraient alors de préférence écrire sous VB6 ceux qui ont l'intention de migrer un jour leur application vers VB.NET ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
et également (important) quid de la réponse à :
----------question2 : si non : quelqu'un saurait-il pourquoi VB.NET n'a pas inclus cette possibilité ?

Quelqu'un la connait-il ?
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
En effet casy, je n'avais pas pour les chaines.
Par contre c'est un tableau qu'il veut :



Dim TaString As String = "HellototoWordtoto!!!totoCommenttotovatototutotojmftoto???"
Dim TableauDeDestination As String() = TaString.Split(New String() {"toto"}, System.StringSplitOptions.None),

----

(Coloration syntaxique automatique par Kenji)





__________
Kenji
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Pour ta question 2b, en VB6 tu n'a pas le choix, donc partant de là ........

Pour la question 2, VB.NET inclut cette possibilité c'est clairement dit dans l'aide.

Un petit bout de code (très sale) pour ton exemple

Dim chaine As String = "mot1totomot2totomot3"
Dim table() As String
Dim sep() As String = {"toto"}

table = chaine.Split(sep, System.StringSplitOptions.None)

For Each s As String In table
        MsgBox(s)
Next

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
"Pour ta question 2b, en VB6 tu n'a pas le choix, donc partant de là ........"



Merci Casy, mais c'est là un constat, pas une explication du choix fait par VB.Net (ce qui m'intéresse, c'est pourquoi ne pas avoir fait directement, comme VB6. En d'autres termes : quelle pouvait donc être la gêne technique ?)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Ben outre le fait que en .NET tout est object et classe tu constatera que la methode .Net offre nettement plus de possibilités et d'horizons que la fonction VB6.
Partant de là il étais logique que cette fonction soit reorganisée.

Deplus étant une fonction de traitement de chaines, il été logique qu'elle soit intégrée dans la classe string.

Bref, personellement, l'évolution faite par M$ ne me choque pas sur ce point, au contraire.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Elle est loin de me choquer, Casy.
Là n'est pas le point...

Le point est celui de déterminer avec précision les "petits obstacles" susceptibles d'être rencontrés lors d'une migration et, si possible, de voir si une autre façon d'écrire d'emblée sous VB faciliterait cette migration (le moins possible à transformer).

La question finale est donc maintenant celle-ci :

Si, au lieu d'utiliser Split sous VB6, on écrivait en ne se servant que de Instr, Len et Mid :
Y aurait-il un iota à transposer pour migrer ?

(Tu l'avais vue venir, cette question, hein ?)
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Je rappelle que je n'attends pas des considérations, mais une réponse (ici : oui ou non, donc)
Messages postés
37
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
11 mars 2007

la question est simple. Pour écrire en pur framework hors espace de nom VB il faudrait aussi modifier le code. En utilisant l'espace de nom VisualBasic il n'y aurait rien à modifier ni avec split ni sans
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Je répète donc ma question :

La question finale est donc maintenant celle-ci :

Si, au lieu d'utiliser Split sous VB6, on écrivait en ne se servant que de Instr, Len et Mid :
Y aurait-il un iota à transposer pour migrer ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Merci à tous ceux qui ont bien voulu participer à cette conversation, dont je rappelle qu'elle n'a pas pour but de comparer des mérites entre VB et VB.net, mais tout autre chose.

Merci
Messages postés
37
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
11 mars 2007

Oui, elle sert juste à démontrer qu'il faut ou tout réécrire ou faire un copier/coller puisque l'espace de nom VisualBasic sert justement à cela
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
C'est TON point de vue, Lemoret....
Su tu permets : J'AI posé MES questions et ai eu des réponses.
Je ne vois pas ou est ton problème et n'ai pas demandé de commentaires autres que des réponses à des questions (je l'ai même précisé d'emblée)
Messages postés
37
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
11 mars 2007

Ce n'est pas mon point de vue, ni un commentaire.
En VB 2005 la notation

Dim toto()
As
Stringtoto = Split(

"mot1totomot2totomot3",
"toto")MsgBox(toto(0))

fonctionne parfaitement en ne nécessite aucune réécriture, sauf si on souhaite ne pas utiliser l'espace de nom VisualBasic. Et si on utilise pas cet espace de nom, alors il n'y a plus de Len, plus de Mid et plus de InStr non plus.
C'est bien la réponse à ta question ?
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Non ce n'est pas la réponse à sa question.
Il veut en .net pas vb6. Le Microsoft.VisualBasic, je sais même pas pourquoi il existe il est à banir, vu que c'est du vb6. C'est d'ailleur pour ca que je préfére le C#, il n'existe pas.






__________
Kenji