IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Utiliser " comme séparateur d'expression [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut Utiliser " comme séparateur d'expression
    Bonjour,

    J'ai un petit problème, j'aimerais utiliser le guillemet (") comme séparateur d'expression.
    Par exemple : REF_PRG := "aaa_b_c_dddddd";
    Récupérer aa_b_c_ddddd
    J'utilise le .split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Dim NomProg() = readText(22).Split(" " ")
                Tb_NomProg.Text = NomProg(1).TrimEnd
    Mais malheuresement il n'accepte pas le caractère guillemet " comme séparateur alors qu'il s'agit d'un caractère unicode.

    Merci d'avance,

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Il faut utiliser readText(22).Split("""") ; il faut le doubler à l'intérieur d'une chaine pour le traiter comme caractère "guillemet" plutôt que délimiteur de début/fin de chaine.

  3. #3
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    J'essaye et je te dis quoi.
    Merci de ta réponse,

    Edit : Ca marche merci

    Edit2 : Petit soucis pour récupérer d'autres données :

    Pour cette ligne : ETAT_PROG := " 3 / 10/11/2014 / MOI";
    Je veux récupérer 3 , 10/11/2014 et MOI
    J'effectue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim EtatProg() As String = readText(37).Split(" "/ ")
    Mais il ne veut pas prendre comme séparateur "/

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux sinon récupérer ce caractère en faisant Chr(34)

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Citation Envoyé par ekydeta Voir le message
    J'essaye et je te dis quoi.
    Merci de ta réponse,

    Edit : Ca marche merci

    Edit2 : Petit soucis pour récupérer d'autres données :

    Pour cette ligne : ETAT_PROG := " 3 / 10/11/2014 / MOI";
    Je veux récupérer 3 , 10/11/2014 et MOI
    J'effectue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim EtatProg() As String = readText(37).Split(" "/ ")
    Mais il ne veut pas prendre comme séparateur "/

    Merci d'avance
    Normal, tu refais la même erreur que précédemment, en mettant un guillemet non-doublé à l'intérieur d'une chaine, celle-ci se "termine" alors au guillemet non-doublé et le code est donc invalide (c'est clairement visible dans tes extraits de code sur le forum, on voit bien que certaines parties sont rouges [signe distinctif d'une chaine de caractères] alors qu'elles ne devraient pas l'être)
    Mais même sans ça, le code ne fonctionnerait pas comme souhaité, quand tu dis split sur " ""/ " ça signifie à chaque fois qu'on rencontre un espace suivi d'un guillemet suivi d'un slash suivi d'un autre espace EXACTEMENT on splitte ; alors que toi tu veux splitter soit sur un guillemet soit sur un slash.

    Par conséquent, pour résoudre ton soucis, tu dois utiliser la surcharge de Split qui prend (entre autres) un tableaux de chaines afin de donner les différents éléments sur lesquels tu souhaite splitter.
    Je te laisse chercher dans la documentation comment faire

  6. #6
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    Tu peux sinon récupérer ce caractère en faisant Chr(34)
    Quel caractère romulus ?

    Je ne comprends pas ta réponse.

    Edit : Chr(34) simule le " en langage Ascii, il me suffit donc d'effectuer de nouveau split.

    Citation Envoyé par Sehnsucht Voir le message
    Normal, tu refais la même erreur que précédemment, en mettant un guillemet non-doublé à l'intérieur d'une chaine, celle-ci se "termine" alors au guillemet non-doublé et le code est donc invalide (c'est clairement visible dans tes extraits de code sur le forum, on voit bien que certaines parties sont rouges [signe distinctif d'une chaine de caractères] alors qu'elles ne devraient pas l'être)
    Mais même sans ça, le code ne fonctionnerait pas comme souhaité, quand tu dis split sur " ""/ " ça signifie à chaque fois qu'on rencontre un espace suivi d'un guillemet suivi d'un slash suivi d'un autre espace EXACTEMENT on splitte ; alors que toi tu veux splitter soit sur un guillemet soit sur un slash.

    Par conséquent, pour résoudre ton soucis, tu dois utiliser la surcharge de Split qui prend (entre autres) un tableaux de chaines afin de donner les différents éléments sur lesquels tu souhaite splitter.
    Je te laisse chercher dans la documentation comment faire
    Merci de cette belle explication Sehnsucht.

    Je vais de ce pas me documenter dans le MSDN.

    Edit : Je n'ai pas réussi à trouver la solution à mon problème.

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Dim EtatProg() As String = readText(37).Split(" / ")
    non?

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,
    Je ne sais pas si j'ai bien compris, mais...
    Pour le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim Str As String = " 3 / 10/11/2014 / MOI"
     
            Dim Str_a As String = Str.Split("/"c)(0)
            Str_a = Str_a.Replace(" ", "")
            Dim Str_b As String = Str.Split("/"c)(1)
            Str_b = Str_b.Replace(" ", "")
            Dim Str_c As String = Str.Split("/"c)(2)
            Str_c = Str_c.Replace(" ", "")
            Dim Str_d As String = Str.Split("/"c)(3)
            Str_d = Str_d.Replace(" ", "")
            Dim Str_e As String = Str.Split("/"c)(4)
            Str_e = Str_e.Replace(" ", "")
     
            MessageBox.Show("***" & Str_a & "," & Str_b & "/" & Str_c & "/" & Str_d & "," & Str_e & "...")

  9. #9
    Membre expérimenté Avatar de ShadowTzu
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    inutile répéter replace et split, example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Dim mydata As String = "ETAT_PROG := "" 3 / 10/11/2014 / MOI"";"
     
    'Qu'un seul replace pour toute la chaine avant le split
    Dim cleaned As String = mydata.Replace(" ", "")
     
    'découpe à partir des guillemets
    cleaned = cleaned.Split(""""c)(1)
     
    Dim Num, Day, Month, Year, Who As String
    'récupère les infos simplement
    Dim splitted() As String = cleaned.Split("/")
    Num = splitted(0)
    Day = splitted(1)
    Month = splitted(2)
    Year = splitted(3)
    Who = splitted(4)
     
    MsgBox(Num & " " & Day & " " & Month & " " & Year & " " & Who)

  10. #10
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Vous aimez bien vous casser la tête ; j'avais pourtant donné un moyen simple (si seulement l'information que ça n'aidait pas assez n'avait pas été donnée dans un edit je l'aurais vue plus tôt )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Const str = "ETAT_PROG := "" 3 / 10/11/2014 / MOI"";"
     
    Dim parts = str.Split({"""", " / "}, StringSplitOptions.None)
     
    For Each part In parts
        Console.WriteLine(part.Trim)
    Next
    Donne comme affichage :
    ETAT_PROG :=
    3
    10/11/2014
    MOI
    ;
    Ne reste plus qu'à garder ce qui est nécessaire

    Après on pourrait aussi passer par une approche expression rationnelle si ça complexifie encore (ou si c'est une source de ralentissement, une regex compilée en début de programme ça peut parfois être un gain de perf [à mesurer dans tous les cas si nécessaire])

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Re:
    Oui!... je devais être fatigué hier
    Vous avez raison tous les deux en plus j'avais même oublié les guillemets ...
    Pour la solution de Sehnsucht c'est bien à condition d'avoir toujours des " / " (espace, slash, espace) comme séparateurs par contre.

    A +

  12. #12
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    Testé et adopté, Merci les amis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un " dans une fonction comme séparateur
    Par nuFox dans le forum WinDev
    Réponses: 3
    Dernier message: 18/02/2009, 16h38
  2. utiliser split() avec un / (comme séparateur)
    Par skyangel20 dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2007, 20h47
  3. Utiliser typename comme nom de variable
    Par Harzoglups dans le forum C++
    Réponses: 5
    Dernier message: 04/01/2006, 14h44
  4. Réponses: 3
    Dernier message: 11/11/2005, 11h59
  5. Utiliser SQL = (Comme "blabla*") mais En VBA sur I
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/10/2005, 19h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo