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

Windows Forms Discussion :

[VB.NET]comment on filtre des chaines de caractères ?


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut [VB.NET]comment on filtre des chaines de caractères ?
    salut!
    je veux savoir comment je pourrais filtrer des chaines de caractères que je lis depuis un fichier texte.
    par exemple ici comment je peux filtrer les chaines qui sont entre "A_" et ":"?:
    SG_ CMPT_PROC4 : test(1,0)
    A_ CHECK_SUM_CMD_BRI_1 : test(1,0)
    A_ SBRI1_2 : test(1,0)

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Utilise les expressions régulières !!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    j'ai testé les expressions régulières!
    (voilà un extrait d'une discussion que j'ai lancé tout à l'heure et j'ai pas eu de réponses!!)

    exemple de lignes où je détecte cette chaine de caractères:
    SG_ CMPT_PROC4 :
    SG_ CHECK_SUM_CMD_BRI_1 :

    j'ai ecris ce code

    Code :
    Public Function Func1(ByVal line As String) As String
    Dim r As New RegularExpressions.Regex("[0-9]+", RegularExpressions.RegexOptions.Compiled)
    Return r.Match(line).Groups(0).Value
    End Function

    Public Function Func2(ByVal line2 As String) As String
    Dim r As New RegularExpressions.Regex("[_][\s][a-zA-Z0-9]+[_]?[a-zA-Z0-9]+", RegularExpressions.RegexOptions.Compiled)
    Return r.Match(line2).Groups(0).Value
    End Function

    Public Sub lecture(ByVal fichier As String)
    Do
    ligne = SR.ReadLine()
    Loop Until (str = ligne.IndexOf("BO_"))
    ID = Func1(ligne)
    SW.WriteLine(ID)
    SW.WriteLine("ID_received =" & ID)
    Do
    If str = ligne.IndexOf("BO_") Then
    ligne2 = SR.ReadLine()
    donnée = Func2(ligne2)
    SW.WriteLine("Dim" & donnée & " as integer")
    End If
    Loop Until chaine <> ligne2.IndexOf(" SG_") '& ligne2.LastIndexOf(":")
    SR.Close()
    SW.Close()
    End Sub
    et sur le fichier texte j'ai:

    70
    ID_received =70
    Dim_ CMPT_PROC4 as integer
    Dim_ CHECK_SUM as integer
    Dim_ SBRI1_2 as integer
    Dim_ SBRI1_1 as integer
    Dim_ SBRI1_0 as integer
    Dim_ SBRI5_2 as integer
    Dim_ SBRI5_3 as integer
    Dim_ SBRI5_1 as integer
    Dim_ int_anti as integer
    Dim_ int_anti as integer
    Dim as integer
    mais j'ai toujours "l'underscore" (_) au début et j'arrive pas à récupérer une longue chaine comme : CHECK_SUM_CMD_BRI_1 et je récupère juste CHECK_SUM.
    j'ai bien fouillé dans les expressions régulières mais j'ai pas trouvé de solutions parfaites pour cette application.

  4. #4
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Re,
    je ne pourrai pas t'aider avec les Regex mais pourquoi pas un substring avec comme départ un IndexOf de "A_" et longueur un différence des IndexOf de ":" et de "_A" ?
    Sinon comme proposé dans un autre post tu Split sur "A_" puis après test d'existence tu Split sur ":" et là tu aura ta chaîne recherchée...
    C'est du bidouillage mais ça marche...enfin à mon avis

  5. #5
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Essai ça ça devrait marcher (attention, c'est en C#, mais seule l'expression régulière compte) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		string txt = textBox1.Text;
    			string regexp = @"[^_]*[^a-zA-Z0-9]+([^:]*)";
    			string result = string.Empty;
    			Regex rg = new Regex(regexp);
     
    			// code
    			if (rg.IsMatch(txt))
    			{
    			result = rg.Match(txt).Groups[1].Captures[0].Value;
    			}

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    sa donne toujours rien !
    donc soit j'ai mal codé ton code en VB soit sa donne rien !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    merci toniolol pour ton idée mais je vois pas comment je pourrais le coder...

  8. #8
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    bizarre... pourtant j'ai essayé chez moi et ça marche nickel...
    Juste j'ai supposé que la chaine en entrée (txt) était une seule ligne (genre A_ CHECK_SUM_CMD_BRI_1 : test(1,0) ) uniquement

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    j'ai essayé de coder ton bout de code en VB.NET mais j'ai des erreurs maintenant...

  10. #10
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Tiens si tu veux en attendant de t'en sortir avec les Regex :
    c'est un peu codé avec les pieds mais ça tourne avec tes exemples...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim strTest As String = "A_ CHECK_SUM_CMD_BRI_1 : test(1,0)"
    Dim tabS1 As String() = Split(strTest, "A_ ")
    If tabS1.Length > 1 Then
        Dim tabS2 As String() = Split(tabS1(1), " : ")
        If tabS2.Length > 1 Then
            MessageBox.Show(tabS2(0))
        End If
    End If
    Sinon avec le pied gauche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim strTest As String = "A_ CHECK_SUM_CMD_BRI_1 : test(1,0)"
    Dim iLimInf As Integer = strTest.IndexOf("A_ ") + 3
    Dim iLimSup As Integer = strTest.IndexOf(" : ")
    If iLimInf <> -1 AndAlso iLimSup <> -1 Then MessageBox.Show(strTest.Substring(iLimInf, iLimSup - iLimInf))

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    merciiiiiiiiiiii je m'en tape des expressions régulières......!!!!!!!!!!!!!!
    merci bcp sa marche nickel !!!

  12. #12
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    voila un futur pro

  13. #13
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par toniolol
    en attendant de t'en sortir avec les Regex

  14. #14
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    sa marche aussi nickel maintenant avec lles collections (groupcollection) des expressions régulières !!!!

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par zeavan
    voila un futur pro
    Si tu le dis !!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    salut!
    toujours des soucis avec sa et sa me gonfle!!!
    comme déjà indiqué dans le code précédent, ce truc c'est un casse tête !
    J'ai écris ce code pour pouvoir récupérer un nombre borné entre ":" et "|" d'une ligne comme celle là:

    BO_ 257 Trm_CMD_VAIO_P2: 7 VAIO
    SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX

    pour récupérer ce nombre en rouge j'ai utilisé 2 méthodes :
    1
    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
     
    Do
                If str = ligne.IndexOf("BO_") Then
                    ligne2 = SR.ReadLine()
                    tabS3 = Split(ligne2, ":")
                    If tabS3.Length > 1 Then
                        tabS4 = Split(tabS3(1), "|")
                        If tabS4.Length > 1 Then
                            position_bit = tabS4(0)
                            SW.WriteLine("")
                            SW.WriteLine(position_bit)
                        End If
                    End If
                End If
            Loop Until chaine <> ligne2.IndexOf(" SG_")
    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Public Function Func2(ByVal line2 As String) As String
            Dim r As New RegularExpressions.Regex("[\s][0-9]+", RegularExpressions.RegexOptions.Compiled)
            Return r.Match(line2).Groups(0).Value
        End Function
     
            Do
                Do
                    ligne2 = SR.ReadLine()
                    position_bit = Func2(ligne2)
                Loop Until chaine <> ligne2.IndexOf(" SG_")
            Loop Until (str = ligne.IndexOf("BO_"))
    et je dois récupérer aussi le nombre entre le "|" et le "@".
    mais toujours rien et je dois résoudre le PB avant demain sinon chui mort !!
    j'attends votre réponse SVP.......

  18. #18
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Quel est la ligne ? la 11 ou la 2) ??

    1)
    SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX

    2)
    BO_ 257 Trm_CMD_VAIO_P2: 7 VAIO SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX

  19. #19
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Et autre question, est-ce toujours un chiffre qui se trouvera entre ":" et "|" et entre "|" et "@" ??

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 137
    Points : 38
    Points
    38
    Par défaut
    ce qui m'interesse est dans la ligne 1
    SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX
    tout les nombres en rouge je dois les récupérer...

Discussions similaires

  1. Comment trier des chaines de caractères
    Par SPACHFR dans le forum Débuter
    Réponses: 9
    Dernier message: 18/12/2009, 18h08
  2. code de filtre et tri des chaines de caractères
    Par fatenatwork dans le forum Collection et Stream
    Réponses: 18
    Dernier message: 12/03/2008, 16h31
  3. Filtre des chaines de caractères en Java
    Par fatenatwork dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/01/2008, 11h11
  4. [VB.NET] comment docker avec des marges entre controles ?
    Par lacsap49 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/11/2006, 16h59
  5. [C++.net]Concatener des chaines de caractère
    Par Dlyan dans le forum MFC
    Réponses: 3
    Dernier message: 27/03/2006, 15h25

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