Problème méthode split() chaine

Résolu
yokulan Messages postés 37 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 juillet 2012 - 21 janv. 2012 à 17:51
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 - 26 janv. 2012 à 10:49
Bonjour tout le monde,

Je suis en train de faire un projet pour mon BTS Informatique de Gestion (les fameuses PTI pour ceux qui connaissent).
Je rencontre un soucis tout bête. Je développe une application de gestion de playlist en VB.NET avec base de données Access.
Mon soucis c'est lorsque je veux séparer l'artiste et le titre.
Je les récupère sous la forme: ARTISTE - Titre
Je fais donc ceci pour les séparer:
Dim Tab() As String = nom_ss_ext.Split("-")
Dim artiste As String = Trim(Tab(0))
Dim titre As String = Trim(Tab(1))


Ca marche bien sauf lorsque l'artiste est lui aussi séparé par un tiret. J'ai donc essayé ceci pour splitter:
Dim Tab() As String = nom_ss_ext.Split(" - ")


Mais il ne prend pas en compte des espaces. Merci de votre aide.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
21 janv. 2012 à 18:36
Merci de vos réponses, cependant je ne vois pas l'utilité d'utiliser Instr() ... 

CX'est pourtant simple !
Instr (ou son equivalent VB.Net) te donne la position du premier " - " (et il ne saurait y en avoir dans le nom )

Ce qui est devant cette position (Mid ou son équivalent VB.Net) est le nom. Tout ce qui est derrière cette position + 3 est le titre !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
21 janv. 2012 à 18:03
Bonjour,

tu vas t'embarquer vers une usine à gaz et les résultats seront aléatoires.
Utilise tout bêtement le caractère 173 en lieu et place du "-" pour séparer le nom du titre
Visuellement, tu auras ainsi un caractère identique (comme un "-") et le split sera à faire sur ce caractère 173.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 janv. 2012 à 18:08
sinon voir peut-être du coté des expressions régulières.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
21 janv. 2012 à 18:14
Va mal s'embarquer également avec les expressions régulières, car comment savoir à quel niveau on est au 1er "-".
Autre solution :
Il est vraisemblable que son "-" de séparation du nom est du tître soit encadré par un espace (ou précédé d'un espace, ou encore suivi d'un espace) alors que je serais étonné de ce que ce caractère "-" soit dans le même à l'intérieur du nom. ====>>
utiliser alors instr (son équivalent VB.Net) sur " - " (par exemple) et prendre ce qu'il y devant (le nom) et ce qu'il y a derrière (le titre)
Instr plutôt que split (juste pour le cas ou, plus loin, on aurait un autre " - ")

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
yokulan Messages postés 37 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 juillet 2012
21 janv. 2012 à 18:19
Merci de vos réponses, cependant je ne vois pas l'utilité d'utiliser Instr() ...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 janv. 2012 à 18:23
Va mal s'embarquer également avec les expressions régulières, car comment savoir à quel niveau on est au 1er "-".

Avec une expression régulière il doit être possible de travailler sur " - " excluant de fait "-". Puisque le titre est séparé de l'artiste par " - " et que l'on peut supposer que le "-" n'est pas entouré d'espace quant il est présent dans le nom de l'artiste, ça doit être jouable.

Cependant je ne maitrise pas assez les regex pour savoir le faire.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
yokulan Messages postés 37 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 juillet 2012
21 janv. 2012 à 18:54
Merci pour l'explication, j'ai compris et ai réussi. Pour ceux qui veulent la solution, voici le morceau de code:

position = InStr(nom_ss_ext, " - ")
artiste = Mid(nom_ss_ext, 1, position)
titre = Mid(nom_ss_ext, position + 3)
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
26 janv. 2012 à 10:49
Sinon en VB.Net

        Dim auteur_titre As String = "Jean-Louis Aubert - Dis quand reviendras-tu ?"
        Dim elements() As String = auteur_titre.Replace(" - ", "§").Split("§")
        MessageBox.Show(elements(0) & Environment.NewLine & elements(1))
0