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 chaines situées entre chaines connues


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 chaines situées entre chaines connues
    Bonsoir,

    Dans une textbox j'ai des chaines de caractères qui se présente sous la forme suivante :

    de 08:00 a 20:00 MR DUPONT CHARLES
    de 20:00 a 08:00 MME DURANT MARIE
    les chaines "de" et "a" sont toujours présente ainsi que les créneau horaire, et pour chaque nouveau nom, une nouvelle ligne se crée.

    ainsi je cherche la solution qui me permettrait de récupérer dans un tableau ou autre, le créneau horaire de début et fin ainsi que le nom de la personne

    j'ai déjà commencer a taper ce petit bout de code qui me permet de compter le nombre de fois ou le "de" se répète

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Dim iRet As Integer = 0
            Dim i As Integer = TextBox1.Text.IndexOf("de", 0)
            Do While i > -1
                iRet += 1
                i = TextBox1.Text.IndexOf("de", i + "de".Length)
            Loop
            Return iRet
    maintenant je me demande comment faire pour récupérer ce qui suit le "de" et le "a" ainsi que le nom ! est ce que vous auriez une idée sur la marche à suivre ? (juste des conseils sur la façon de faire, je me débrouillerais pour le code, merci)

  2. #2
    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,
    assez facile à faire avec les Regex.
    Tu scindes ta ligne avec des groupes dont tu captures uniquement ceux qui t'intéressent.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Par défaut
    les fonctions de manipulation de chaines comme mid devraient vous aider

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.71).aspx

  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
    finalement j'ai opté pour les manipulations de chaines, et voila ce que j'ai pu faire de beau :

    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
     For Each ligne As String In TextBox1.Text.Split(Environment.NewLine)
                Dim Tab() As String = ligne.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries) 'place dans un tab() les chaines séparé par des espaces
                Dim i As Integer
                Dim hdeb As String
                Dim hfin As String
                Dim nom As String
                For i = 0 To Tab.Length - 1 'pour chaque chaine de la ligne je fait
                    If Tab(i).Contains("de") Then 'si je trouve "de" dans tab(i) alors l'heure de debut est tab(i+1)
                        hdeb = Tab(i + 1)
                        Label8.Text = hdeb
                    End If
                    If Tab(i).Contains("a") Then 'si je trouve "a" dans tab(i) alors l'heure de debut est tab(i+1)
                        hfin = Tab(i + 1)
                        Label9.Text = hfin
                        nom = Tab(4) & " " & Tab(5) & " " & Tab(6) 'et donc dans tab(4 & 5 & 6) donne la civilité le nom et prenom que je concaténe dans une var
                        Label10.Text = nom
                    End If
                Next i
            Next
    mais il me reste un soucis de taille, concernant le stockage des chaines récupéré, en effet dans l'exemple ci dessus, j'affiche mes résultats dans les label.
    Mais je n'obtient que les dernières données de la ligne, alors comment pourrais je faire pour stocker autant de le créneau horaire et de début et fin ainsi que le nom de la personne autant qu'il y a de ligne ?
    j'ai penser à des tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim hdeb() As String
                Dim hfin() As String
                Dim nom() As String
    Mais après il me faut crée une boucle pour chaque ligne qui insère dans le tableau les données !!!

  5. #5
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    une petite question
    d'où vient le text dans le textbox je veux dire tu frappes
    de 08:00 a 20:00 MR DUPONT CHARLES
    où est ce une concatenation les heures proviennent de tes combobox ?

  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
    le textbox est rempli par un fichier texte au chargement de ma fenêtre.
    il n'y a pas de combobox,

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans Dvp.NET il y a des méthodes From et To qui servent à ça

    Ça s'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim heureDebut As String = ligne.From("de ").To(" a ")

  8. #8
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Public Class data
        Public starthour As String
        Public endhour As String
        Public name As String
        Public surname As String
    End Class
     
    Public Class Form1
    Private listdata As New List(Of data)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     ReadAllFile("C:\BBB\text1.txt")
    End Sub
     
    Private Sub ReadAllFile(ByVal path As String)
            Dim lists As New List(Of String)
            Dim parts() As String
            Try
                lists = System.IO.File.ReadAllLines(path).ToList
                For Each items As String In lists
                    parts = items.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
                    Dim dataclient As New data
                    dataclient.starthour = parts(1)
                    dataclient.endhour = parts(3)
                    dataclient.name = parts(5)
                    dataclient.surname = parts(6)
                    listdata.Add(dataclient)
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
     
    End Class

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

Discussions similaires

  1. Différence entre chaine vide et chaine nulle
    Par brassouille dans le forum PL/SQL
    Réponses: 2
    Dernier message: 30/12/2008, 11h04
  2. Réponses: 8
    Dernier message: 21/02/2008, 09h23
  3. comparaison entre chaines de caracteres
    Par Mpierre dans le forum Oracle
    Réponses: 2
    Dernier message: 22/06/2006, 23h21
  4. Extraire une chaine contenue entre 2 delimiteurs
    Par gregb34 dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 08h21
  5. Matching entre chaines de caractères
    Par shenron666 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 13/10/2005, 16h39

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