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. #41
    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
    ben la je sais pas trop.
    Mais en C#, il faut mettre un "@" devant la string représentant le pattern de l'expression régulière, car il aime pas les "\" sinon.
    Peut-être en VB.Net pareil ??

  2. #42
    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 pour ta remarque sur l'option multiline elle est bien mais dommage, elle correspond pas à mon projet si tu vx, je dois lire ligne pas ligne le fichier..

  3. #43
    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 ça peut-être :
    Loop Until chaine <> ligne2.IndexOf(" SG_")
    Qu'est-ce que la variable chaine ? un Integer ? en tout cas, ça devrait être le cas

  4. #44
    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
    pour le "@" il aime pas ..

  5. #45
    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
    pour chaine c'est une string c'est pour détecter les début de ligne qui commence par "SG_" donc à chaque fois qu'il trouve un bout de morceau au début qui commence par "BO_", il parcoure ce bout pour trouver toutes les lignes qui commencent par "SG_" et ensuite (et c'est là le souci!) je dois récupérer les nombres qui sont sur cette ligne...

  6. #46
    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 essai avec un autre Index pour le Group(1).
    Essai 0 peut-être.

    Et envoi-moi la chaine exact que tu as en entrée STP (la chaine de la ligne qui plante)

  7. #47
    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
    pour chaine c'est une string c'est pour détecter les début de ligne qui commence par "SG_" donc à chaque fois qu'il trouve un bout de morceau au début qui commence par "BO_", il parcoure ce bout pour trouver toutes les lignes qui commencent par "SG_" et ensuite (et c'est là le souci!) je dois récupérer les nombres qui sont sur cette ligne...
    Oui mais la méthode retourne un Integer si je ne m'abuse (en tout cas en C# mais je penses pas que ça soit spécifique au langage ça)

  8. #48
    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
    Moi j'aurais plus fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (ligne2.StartWith("BO_"))
    {
      // traitement de la ligne
    }
    car je te dis, IndexOf renvoi le la position du caractère si la chaine est trouvée, sinon -1 (ou 0 je sais plus)

  9. #49
    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
    comme tu m'a expliqué hier à chaque fois qu'on veut un group on lui undique juste le numéro du group pour le récupérer donc là j'ai mis en paramètre le 1er et sa marche pas (group(1)).
    et là t'a un exemple du bout de texte que je dois lire dans le fichier texte:

    BO_ 257 Trm_CMD_VAIO_P2: 7 VAIO
    SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX
    SG_ libre_1 : 15|1@0+ (1,0) [0|1] "" Vector__XXX
    SG_ Vitesse : 8|9@0+ (1,0) [0|511] "" Vector__XXX
    SG_ Consomation_moyenne : 27|4@0+ (1,0) [0|15] "" Vector__XXX
    SG_ Vitesse_moyenne : 7|8@0+ (1,0) [0|255] "" Vector__XXX
    SG_ Consomation : 14|6@0+ (1,0) [0|63] "" Vector__XXX

    donc là comme je t'ai expliqué je lance la lecture du fichier, dès que je détecte la ligne avec le "BO_" je dois lire toutes les lignes qui suivent commençantes par "SG_" afin de récupérer ces nombres..

  10. #50
    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
    En VB.Net, le première indice d'une collection n'est-il pas 1 ?
    Dans ce cas, le premier group contenant un chiffre est 2 et non 1

  11. #51
    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
    Voici mon code en C# qui fonctionne avec le texte que tu m'as donné tout à l'heure:
    Attention : je ne vérifie pas que mes lignes commencant pas "SG_" soient bien précédée d'une ligne commençant par "BO_"

    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
    34
    35
    36
    37
    38
    39
    40
    41
     
    // chaine en entrée (sur plusieurs lignes, cf message #49)
    string txt = textBox1.Text;
     
    // Expression régulière
    string regexp = @"[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\]\w]*";
    string result = string.Empty;
    Regex rg = new Regex(regexp);
     
    // Je sépare le texte en autant de lignes
    string[] lignes = txt.Split(new char[] { '\r', '\n' });
    int cpt1 = 0;
     
    // Pour chacune des lignes lues
    foreach (string ligne in lignes)
    {
    	// Si elle commence par "SG_"
    	if (ligne.StartsWith("SG_"))
    	{
    		// Si mon expression trouve qq chose (mettre un point d'arret ici)
    		if (rg.IsMatch(ligne))
    		{
    			int cpt = 0;
    			result += "\r\nLIGNE " + cpt1.ToString() + "\r\n";
    			foreach (Group g in rg.Match(ligne).Groups)
    			{
    				if (cpt > 0)
    				{
    					foreach (Capture c in g.Captures)
    					{
    						result += c.Value + " - ";
    					}
    				}
    				cpt++;
    			}
    		}
    		cpt1++;
    	}
    }
     
    label1.Text = result;

  12. #52
    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
    Penses à mettre un point d'arret sur la ligne effectuant le IsMatch, tu sera comme ca si l'expression régulière est valide pour la ligne lue

  13. #53
    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
    Le résultat obtenu par mon code :


    LIGNE 1
    31 - 4 - 0 - 15 -
    LIGNE 2
    15 - 1 - 0 - 1 -
    LIGNE 3
    8 - 9 - 0 - 511 -
    LIGNE 4
    27 - 4 - 0 - 15 -
    LIGNE 5
    7 - 8 - 0 - 255 -
    LIGNE 6
    14 - 6 - 0 - 63 -

  14. #54
    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 fait un truc à la con :
    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
            ligne = SR.ReadLine()
            If ligne.StartsWith("BO_") Then
                ligne2 = SR.ReadLine()
                If ligne2.StartsWith(" SG_") Then
                    'position_bit = Func2(ligne2)
                    MsgBox(position_bit)
                    If (rg.IsMatch(ligne2)) Then
                        For Each g In rg.Match(ligne2).Groups
                            result += "\r\nGROUP " + cpt.ToString() + "\r\n"
                            SW.WriteLine(result)
                            MsgBox(result)
                            'If (cpt > 0) Then
                            For Each c In g.Captures
                                result += c.Value + "\r\n"
                                MsgBox(result)
                                SW.WriteLine(result)
                            Next c
                            'End If
                            'cpt += cpt
                        Next g
                        SW.WriteLine(result)
                    End If
                End If
            End If
    sa marche bien mais il récupère pas les bons mais c'est un détail... mais ce qui m'enerve c'est que comme sa sa marche mais en appelant la fonction qui fait ce boulot automatiquement sa ne marche pas ...

  15. #55
    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
    Il semblerait donc que tes pb viennent du fait que la recherche regexp était placée dans une fonction....

  16. #56
    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
    si c'etait le cas sa n'aurait pas marcher précedemment pour la detection des mots qui sont après les "BO_"... mais bon , c bizarre sa marche pas toujours...

  17. #57
    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
    Ca fonctionne plus là ??

  18. #58
    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
    en fait je sais que ces trucs sont simple mais ce qui me gêne c'est le contexte du projet sur lequel je travaille... celui ci rend un petit peu la détection automatique des strings dans un fichier.txt un peu délicate..

  19. #59
    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 t'ai dis sa me donne des msgbox vides et quand je le sors du projet sa marche à merveille !! et si sa marche sa me donne n'importe quoi...

  20. #60
    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 me suis débrouillé avec les tableaux... pour le moment même il y'a une truc qui m'échappe mais si sa a l'air con! je veux vérifier un nombre tapé dans un textbox si il est multiple de 8 donc j'ai ecris sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If TextBox2.Text = 8 * n Then
                MsgBox(TextBox2.Text)
            End If
    avec n = integer
    mais sa marche pas !!!

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