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 :

extraire 'String' aprés libelle


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut extraire 'String' aprés libelle
    Bonsoir,
    je souhaite extraire deux nombres situé derrière un libellé qui se présente sous cette forme :

    Coordonnees : 875243 2481718

    j'ai donc fait ceci en me basant sur les contraintes suivantes :
    Le libellé "Coordonnees :" est toujours le même
    Le nombres de caractéres de "Coordonnees : " est de 18

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     'coordonnée gps
                        Dim debut_coog As Integer = TextBox1.Text.IndexOf("Coordonnees :     ") + 18
                        Dim fin_coog As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_coog)
                        Dim longeur_coog As Integer = fin_coog - debut_coog
                        coo_lambert = TextBox1.Text.Substring(debut_coog, longeur_coog)
    le soucis, c'est que mon programme à reçu ce matin les coordonnées sous cette forme :

    Coordonnees : 87427129 248510992

    du coup moins de 18 caractère entre le début de Coordonnées et le premier chiffre !
    auriez une piste, pour résoudre mon problème ?

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    On peut utiliser les fonctions :
    • String.Replace() pour remplacer "Coordonnees :" par ""
    • String.Trim() pour enlever les blancs de début et de fin.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        'Cas 1 : "Coordonnees : 875243 2481718"
        'Cas 2 : "Coordonnees : 87427129 248510992"
        'Exemple d'appel de la fonction
        Dim nombres() As String = RecupererValeurs("Coordonnees : 875243 2481718")
     
        Private Function RecupererValeurs(ByVal chaine As String) As String()
            'Les valeurs commencent toujours après le terme "Coordonnées : " . 
            'On supprime donc cette portion de texte
            chaine = chaine.Substring("Coordonnees : ".Length - 1)
            'Il ne reste plus qu'à récupérer les 2 valeurs qui sont séparées par un espace
            Dim valeurs() As String = chaine.Trim.Split(" ")
            Return valeurs
        End Function

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    et comment puis je faire pour affecter séparément les 2 valeurs a 2 variables, j'ai essayé ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim chaine As String
                        chaine.Substring("Coordonnees : ".Length - 1)
                        Dim valeurs() As String = chaine.Trim.Split(" ")
     
    'ma variable chaine contient 87427129   248510992 
     
    Dim sep() As String 'tableau pour les coordonnées
                sep = Split(chaine, "    ") 'affecte à un tableau la 1er et 2eme chaine entre 4 espaces malheureusement dans mon exemple ci dessus j'ai 3 espaces :(
                coo_lambert_x = CDbl(sep(0)) 'affecte a la var la coordonnée x en LT2E converti en Double
                coo_lambert_y = CDbl(sep(1)) 'affecte a la var la coordonnée y en LT2E converti en Double

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Par défaut
    Une solution envisageable : convertir tous les "doubles espaces" en "simple espace" avant d'extraire les valeurs :
    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
     
            Dim chaine As String = "Coordonnees : 87427129       248510992"
            Dim coo_lambert_x As Double
            Dim coo_lambert_y As Double
            'On remplace TOUS les doubles espaces par un espace SIMPLE
            Do
                chaine = chaine.Replace("  ", " ")
            Loop Until chaine.Contains("  ") = False
            'On supprime le terme "Coordonnees : "
            chaine = chaine.Substring("Coordonnees : ".Length - 1)
            'On récupère les 2 valeurs qui sont désormais séparées par un SEUL espace
            Dim valeurs() As String = chaine.Trim.Split(" ")
            'On affecte ces valeurs aux variables
            coo_lambert_x = Double.Parse(valeurs(0))
            coo_lambert_y = Double.Parse(valeurs(1))

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    Malheureusement j'ai d'autre donnée a extraire parmi celle ci, n'existerait il pas une autre solution en sachant que l'espace entre les 2 valeurs numérique peu varié ?

    Coordonnees : 87427129 248510992
    Coordonnees : 875075 2487061

  7. #7
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Utilise la fonction Split() avec ":",
    puis un deuxième split() avec " " comme séparateur et comme paramètre StringSplitOptions.RemoveEmptyEntries.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    Si la ou les chaines recherchées ont toujours le même modèle, mais que leur position dans le texte est aléatoire, une regex peut être une voie.
    Ici des chaines de chiffres, soit \d+ (un ou plusieurs chiffres) encadrée par \b (extrémités de "mots", ici l'espace) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim modele As String = "\b\d+\b"
            Dim r As New Regex(modele)
            Dim mcXY As MatchCollection = r.Matches(tbxRecepCoord.Text)
     
            Dim x As String = mcXY.Item(0).Value
            Dim y As String = mcXY.Item(1).Value

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    chrismonoye -> le probléme c'est que la longuer des champs numériques peut varier de 4 à 9 pour chacun, oui seul leur position et le nombre d'espace entre les deux valeurs numériques varient.

    je vais m'interesser au regex, merci chris.

    Graffito, si je fait un deuxième split() avec " " ca ne fonctionnera pas car parfois j'ai " " (3 espaces) ou 2.

    j'ai deja essayé et ca m'avait donné ca pour un tableau de valeurs()
    valeurs(0) => 87427129
    valeurs(1) => " "
    valeurs(2) => " "
    valeurs(3) => 248510992

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    C'est bon j'ai trouvé, merci à tous pour votre aide,
    j'ai fait ceci, peut être que ça pourra aider quelqu'un un jour :

    sur msdn j'ai trouvé : "StringSplitOptions.RemoveEmptyEntries"


    et ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim coo_lambert As String
        Dim words() As String
    Dim debut_coog As Integer = TextBox1.Text.IndexOf("Coordonnees :") + 13
            Dim fin_coog As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_coog)
            Dim longeur_coog As Integer = fin_coog - debut_coog
            coo_lambert = TextBox1.Text.Substring(debut_coog, longeur_coog)
            Label1.Text = coo_lambert
            words = coo_lambert.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries)
            Label2.Text = words(0)
            Label3.Text = words(1)

  11. #11
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    gastoncs :
    sur msdn j'ai trouvé : "StringSplitOptions.RemoveEmptyEntries"
    et si tu avais bien lu ma réponse, tu n'aurais pas eu à chercher
    Graffito :
    Utilise la fonction Split() avec ":",
    puis un deuxième split() avec " " comme séparateur et comme paramètre StringSplitOptions.RemoveEmptyEntries
    .

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    Ah oui désolé, ca m'apprendra à lire à la va vite
    merçi quand meme pour ton aide

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonsoir,

    Ce qui donne en suivant les indications de Graffito :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim words() As String = (TextBox1.Text.Split(":")(1)).Split(New String() {}, StringSplitOptions.RemoveEmptyEntries)
            Label2.Text = words(0)
            Label3.Text = words(1)
    A+, hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. [RegExp] Extraire string vers json
    Par lokomass dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2014, 15h49
  2. [XL-2003] Macro, extraire chaîne après caractère spécifique
    Par arkhang dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/11/2013, 12h03
  3. [RegEx] extraire string d'une autre string
    Par gégé140488 dans le forum Langage
    Réponses: 1
    Dernier message: 19/11/2012, 20h42
  4. Creer un tableau [Strings] apres tonkenizer
    Par vierkjan dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/06/2012, 17h24
  5. Extraire caractère après /
    Par pasb71 dans le forum Access
    Réponses: 3
    Dernier message: 18/05/2011, 11h59

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