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. #21
    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é les expressions régulières et sa ne donne rien sa me retourne ceux qui sont sur l'autre ligne...

  2. #22
    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
    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
    private void button1_Click(object sender, EventArgs e)
    {
    	string txt = textBox1.Text;
    	string regexp = @"[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*";
    	string result = string.Empty;
    	Regex rg = new Regex(regexp);
     
    	// code
    	if (rg.IsMatch(txt))
    	{
    		int cpt = 0;
    		foreach (Group g in rg.Match(txt).Groups)
    		{
    			if (cpt > 0)
    			{
    				result += "\r\nGROUP " + cpt.ToString() + "\r\n";
    				foreach (Capture c in g.Captures)
    				{
    					result += c.Value + "\r\n";
    				}
    			}
    			cpt++;
    		}
    	}
     
    	label1.Text = result;
    }

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GROUP 1
    31
     
    GROUP 2
    4
     
    GROUP 3
    0
     
    GROUP 4 
    15
    Donc ce qui compte c'est tooujours l'expression régulière, et les données sont dans les collectionsgroup 1, 2, 3 et 4 (Captures 0 à chaque fois)

  3. #23
    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
    c'est sa ce que je n'ai pas compris comment sa marche les groupcollection ?

  4. #24
    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
    et merci bcp....

  5. #25
    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
    Dans l'expression :
    "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*"

    regardes les (...)
    tout ce qui se retrouve entre des () correspond à un group, sachant que le groupe 0 correspond à toute la ligne.
    Donc ici, j'ai 4 fois des (), soit 5 groupe :

    groupe 0 : toute le ligne
    groupe 1 : le premier ()
    groupe 2 : le second ()
    ...

  6. #26
    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
    ah d'accord c bon merci .
    en fait il lit chaque ligne et la relie " match" à chaque groupe dans le regex et pour récupérer ce qu'on veut il reste juste à choisir le group... par contre sa doit marcher pour n'importe quelle ligne ...

  7. #27
    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
    oui ca drevrait marcher pour n'importe quelle ligne respoectant le contrat de la regexp
    "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\]\w]*"
    , c-a-d :

    1) n'importe-quel caractère autre que ":" suivit d'un espace
    2) group 1 : au moins un chiffre entre 0-9
    3) un "|"
    4) group 2 : au moins un chiffre en tre 0-9
    5) un "@" suivit de tout sauf un "["
    6) group 3 : au moins un chiifre entre 0-9
    7) un "|"
    8) au moins un chiffre en 0-9
    9) un "]"
    10) n'importequoi d'autre

  8. #28
    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
    oui super ! merci bcp pour ces explications... c'est très sympa de ta part...

  9. #29
    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
    de rien. Si ça peut te faire utiliser plus facilement les expressions régulière. Ya rien de mieux pour ce type de travaux, et c'est vraiment pas dur, faut juste connaitre les caractères clé, et un peu de logique.

    Bon courage pour demin

  10. #30
    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
    c vrai que je galère pour traduire ton code en VB.NET mais bon c très efficace ce ke tu m'a donné vraiment sympa et merci !!

  11. #31
    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
    dsl encore mais pour moi sa ne marche pas sous VB!!!
    J'ai essayé sa :
    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
     
            Dim regexp As String = "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*"
            Dim rg As New RegularExpressions.Regex(regexp)
            Dim cpt As Integer = 0
            Do
                Do
                    ligne2 = SR.ReadLine()
                    If (rg.IsMatch(ligne2)) Then
                        For Each g In rg.Match(ligne2).Groups
                            result += "\r\nGROUP " + cpt.ToString() + "\r\n"
                            If (cpt > 0) Then
                                For Each c In g.Captures
                                    result += c.Value + "\r\n"
                                    SW.WriteLine(result)
                                Next c
                            End If
                            cpt += cpt
                        Next g
                    End If
     
                Loop Until (str = ligne.IndexOf("BO_"))
            Loop Until chaine <> ligne2.IndexOf(" SG_")
    je crois ke ce n'est pas normal !!

  12. #32
    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
    je dois résoudre ce PB pour l'après midi sinon je suis cuit car sa fait longtemps que je traine là dessus et sa commence à m'ennuyer et m'enerver !!!

  13. #33
    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 résultat / erreur obtient tu ??

  14. #34
    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
    je ne récupère pas les nombres... et sa génère pas d'erreur. J'ai l'impression qu'il ne trouve pas ligne qui correspond au regex donc il m'affiche rien tiens regarde ce code ke j'ai écris:
    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
        Dim g As RegularExpressions.Group
        Dim c As RegularExpressions.Capture
        Dim result As String
        Dim regexp As String = "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*"
        Dim rg As New RegularExpressions.Regex(regexp)
        Dim cpt As Integer = 0
        Dim txt As String
        Public Function Func2(ByVal line2 As String) As String
            If (rg.IsMatch(line2)) Then
                For Each g In rg.Match(line2).Groups
                    result += "\r\nGROUP " + cpt.ToString() + "\r\n"
                    If (cpt > 0) Then
                        For Each c In g.Captures
                            result += c.Value + "\r\n"
                        Next c
                    End If
                    cpt += cpt
                Next g
            End If
            Return rg.Match(line2).Groups(1).Value
        End Function
               Do
                    ligne2 = SR.ReadLine()
                    position_bit = Func2(ligne2)
                    MsgBox(position_bit)
                      Loop Until chaine <> ligne2.IndexOf(" SG_")
            End If
    J'appelle la fonction pour récupérer le groupe 1 mais j'ai un message box vide...

  15. #35
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Return rg.Match(line2).Groups(1).Value
    Essai plutot ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Return rg.Match(line2).Groups(1).Captures(0).Value
    Mais je connais pas bien le VB.Net

  16. #36
    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
    cela me génère une exception lors de l'execution.
    un avertissement: Specified argument was out of the range of valid values.
    Parameter name: i

  17. #37
    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
    Sinon autre chose avec les regexp, tu n'ai pas obligé de lire ton fichier en entrée ligne par ligne et pour chaque ligne faire ta regexp, tu peut traiter tout on fichier en regexp avec l'option suivante dans l'objet regexp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex rg = new Regex(<expression>, RegexOptions.Multiline);
    puis dans le code, au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach(Group g in rg.Matc(txt).Groups) {...}
    tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Match m in rg.Matches(txt)) 
    {
        foreach(Group g in m.Groups) {...}
    }

  18. #38
    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
    Specified argument was out of the range of valid values.
    Parameter name: i
    Il sort d'où ce i ???

  19. #39
    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
    moi aussi je me pose cette question! jai pas de i dans mon code.
    mais je crois que c'est pas rapport à l'entrée du regex.. la ligne qu'il lit n'et pas valide ou un truc comme sa ..

  20. #40
    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
    moi aussi je me pose cette question! jai pas de i dans mon code.
    mais je crois que c'est pas rapport à l'entrée du regex.. la ligne qu'il lit n'et pas valide ou un truc comme sa ..

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