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] lecture fichier texte et détection des mots


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] lecture fichier texte et détection des mots
    salut tout le monde.
    Visual Basic 2005 edtion express.
    Je suis en train de coder une application pour la lecture dans un fichier texte et détecter certains mots dans ce fichier par contre mon souci c'est que je n'arrive pas à exploiter cela :
    mon projet consiste à récupérer des trames "CAN" dans un fichier texte (.dbc). Dans ce fichier il y'a plusieurs trames qu'on reconnait par leur identifiant "ID" et qui commence par "BO_" exemple:

    BO_ 1160 Trm_CMD_IS_CMM: 6 SUPSYM
    SG_ Temp_Huile_Mot : 47|8@0- (1,0) [-128|127] "" CMM
    SG_ Temp_Eau_Mot : 7|8@0- (1,0) [-128|127] "" CMM

    BO_ 841 Trm_CMD_IS_BV: 4 SUPSYM
    SG_ Etat_embrayage : 27|4@0+ (1,0) [0|15] "" BVM_Proto

    BO_ 773 Trm_CMD_VOL: 2 SUPSYM
    SG_ Angle_Volant_Capteur : 7|16@0- (0.1,0) [-780|780] "Degr," Angle_volant


    donc ce que je veux c'est détecter les "BO_" au début et ensuite choisir l'identifiant qui va avec (841 ou 773 ou 1160...)

    le code que j'ai écrit pour la lecture dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Do
                    ligne = SR.ReadLine()
                    SR.Close()
                Loop Until (str = ligne.IndexOf("BO_"))
    avec déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim SR As StreamReader = File.OpenText("C:\user\U256265\Visual Studio 2005\WindowsApplication1\F2005.dbc")
    après pour le choix de l'identifiant je sais pas si ce code va marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                If "BO_" & 100 Then
               SW.writeline("")
                End If
    j'attends votre aide SVP.

  2. #2
    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 mon autre souci c'est que j'ai un problème avec l'appel d'une procédure qui fait appel à des élément d'une structure:
    J'ai une structure déclarée dans une classe (canusb) comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Public Structure tCanMsgStruct
            Public m_dwID As Int32          ' DWORD m_dwID;     // CAN Identifier
            Public m_bFF As Byte          
            Public m_bDLC As Byte          
            <MarshalAs(UnmanagedType.ByValArray, sizeConst:=8)> _
            Public m_bData() As Byte        
            Public m_dwTime As Integer
    j'utilise cette structure dans une autre classe (deocdage) dans les paramètres d'une procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      Public Sub decoder(ByVal tempRxCanMsg As Canusb.tCanMsgStruct)
            Try
     
                Dim ID_received As Integer = tempRxCanMsg.m_dwID
                Dim DLC_received As Integer = tempRxCanMsg.m_bDLC
     
     
                If tempRxCanMsg.m_dwID = &H100 Then  '....etc
               '...
           end if
    end sub
    et là je veux appeler cette procédure dans la classe Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Call oDecodage.decoder(tempRxCanMsg.m_dwID)
    mais cela me génère une erreur en me disant que c'est pas le même type.
    mais tempRxCanMsg.m_dwID fais bien partie ce cette structure et je comprend pas pourquoi il le prend pas en paramètres!

    j'espère avoir des solutions...

  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
    toujours pas de réponses à ce sujet.....
    un peu déçu !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Pour ta premiere question:
    Il te faut lire ton fichier ligne à ligne. Je me suis pas trop pencher sur ton code mais ca a l'air d'être pas trop mal. Si ca marche pas va voir ici.
    Pour chaque ligne tu utilises la fonction Trim() (pour suprimer les caractère vide a gauche et à droite de ta chaine) et tu utilises ensuite la fonction StartWith():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String ligne;
    ...
    if ( ligne.Trim().StartWith("BO_"))
    {
        ....
    }
    regarde la MSDN si tu veux plus d'info sur ces fonctions mais c'est assez simple .

    Pour ta seconde question ta fonction attend une Structure .Quel est le type de "tempRxCanMsg.m_dwID"
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  5. #5
    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 pour ton aide mais je te rappelle que je développe sous VB.NET.
    pour ta question sur le type de tempRxCanMsg.m_dwID je crois que sa déclaration est faite dans le code que j'ai ecris concernant la structure mais je le réécris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Structure tCanMsgStruct
            Public m_dwID As Int32          ' DWORD m_dwID;     // CAN Identifier
     
            Public m_bFF As Byte          
            Public m_bDLC As Byte          
            <MarshalAs(UnmanagedType.ByValArray, sizeConst:=8)> _
            Public m_bData() As Byte        
            Public m_dwTime As Integer     
        End Structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim tempRxCanMsg As Canusb.tCanMsgStruct
    donc tempRxCanMsg.m_dwID est un integer.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 453
    Points : 1 764
    Points
    1 764
    Par défaut
    salut
    pour ton 2eme probleme ca serait pas ca plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Call oDecodage.decoder(tempRxCanMsg)

  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
    c'est ce que j'ai essayé mais est ce qu'il va récupérer l'ID c'est à dire le tempRxCanMsg.m_dwID ? j'ai juste besoin de l'integer (tempRxCanMsg.m_dwID) pas de toute la structure.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    La traduction entre VB et C# est pas trop compliqué. Tu possede certainement les même fonctions puisqu'elle dependent de l'objet String.

    Pour ton second probleme:
    Si tu n'as besoin que de l'ID tu doit modifier ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Public Sub decoder(ByVal ID As Integer)
    Si ta fonction attend un Int passe lui un Int, Si elle attend une Structure passe lui une structure sinon tu aura forcement une Exception !
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  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
    en fait la procedure decoder a toute la structure tempRxCanMsg comme paramètre puiqu'elle contient beaucoup de données et gère plusieurs informations qui figurent dans la structure:

    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
     
     Public Sub decoder(ByVal tempRxCanMsg As Canusb.tCanMsgStruct)
            Try
     
                Dim ID_received As Integer = tempRxCanMsg.m_dwID
                Dim DLC_received As Integer = tempRxCanMsg.m_bDLC
                'chaine1 += ID_received & " "
                ''swf = Form1.swf1
                'For i As Integer = 0 To DLC_received - 1
                '    chaine1 += (tempRxCanMsg.m_bData(i) & " ")
                'Next
     
                If tempRxCanMsg.m_dwID = &H100 Then            ' réception trame 100h périodique (256)
     
                    TEMP_HUILE = CInt(tempRxCanMsg.m_bData(6))
                    TEMP_EAU = CInt(tempRxCanMsg.m_bData(7))
                    REGIME = CInt(tempRxCanMsg.m_bData(3))
                    ANGLE_VOLANT = CInt(findData(tempRxCanMsg.m_bData(1), 0, 1) * 256 + tempRxCanMsg.m_bData(2))
                    JAUGE_CARBURANT = CInt(tempRxCanMsg.m_bData(2))
                    ACCEL_H = CInt(tempRxCanMsg.m_bData(4))
                    ACCEL_V = CInt(tempRxCanMsg.m_bData(5))
                    RaiseEvent transmitEvent("ANGLE_VOLANT", ANGLE_VOLANT)
                    RaiseEvent transmitEvent("REGIME", REGIME)
                    RaiseEvent transmitEvent("ACCEL_H", ACCEL_H)
                    RaiseEvent transmitEvent("ACCEL_V", ACCEL_V)
                    RaiseEvent transmitEvent("TEMP_HUILE", TEMP_HUILE)
                    RaiseEvent transmitEvent("TEMP_EAU", TEMP_EAU)
                    RaiseEvent transmitEvent("JAUGE_CARBURANT", JAUGE_CARBURANT)
     
                ElseIf tempRxCanMsg.m_dwID = &H101 Then            ' trame 101h périodique (257)
     
                    VIT_MOY = CInt(tempRxCanMsg.m_bData(0))
                    VITESSE = CInt(findData(tempRxCanMsg.m_bData(0), 0, 2) * 128 + findData(tempRxCanMsg.m_bData(1), 1, 7))
                    CONSO_INST = CInt(tempRxCanMsg.m_bData(1))
                    CONSO_MOY = CInt(tempRxCanMsg.m_bData(3))
                    KM_TOTAL = CInt((tempRxCanMsg.m_bData(4) * 256 * 256 + tempRxCanMsg.m_bData(5) * 256) + tempRxCanMsg.m_bData(6))
                    RaiseEvent transmitEvent("VIT_MOY", VIT_MOY)
                    RaiseEvent transmitEvent("VITESSE", VITESSE)
                    RaiseEvent transmitEvent("CONSO_INST", CONSO_INST)
                    RaiseEvent transmitEvent("CONSO_MOY", CONSO_MOY)
                    RaiseEvent transmitEvent("KM_TOTAL", KM_TOTAL)
    là c'est un extrait de la procédure car elle est beaucoup plus longue...
    en fait il y'a plusieurs informations comme je l'ai déjà indiqué dans le code de la structure et je passe dans les paramètres de la procédure décoder un paramètre( tempRxCanMsg)qui récupère et hérite les variables de la structure (Canusb.tCanMsgStruct) par contre moi je veux juste récupérer une variable parmi les autres et la faire passer comme paramètre de la procédure décoder.
    est ce que c'est possible?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    A moins de surcharger la méthode je pense que c'est impossible.
    Si la signature de ta fonction attend un type Structure tu peux pas lui passer un entier !

    Si tu appel ta fonction de la sorte :


    Call oDecodage.decoder(tempRxCanMsg.m_dwID)

    tu passe un entier ta fonction. m_dwID est un type Entier.
    Du coup tu passe pas toute la structure donc tu as pas le même type.
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  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
    merci pour ton aide mais t'aurais pas une solution?

  12. #12
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    tu as essayé les expression regulieres ?

  13. #13
    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 à dire ?

  14. #14
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    si j'ai bien compris c'est qlq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function Func(line As String) As String
            Dim r As New Regex("BO_\s[0-9]+", _ RegexOptions.Compiled)
            Return r.Match(line).Groups(2).Value;
        End Function

  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
    il fait quoi ce code que tu viens d'écrire?

  16. #16
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    tu lui passe une ligne du ficher et te retourne ton code
    _
    Normalement (je n'ai pas tester !)

  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
    il me retourne quel code?

  18. #18
    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é sa n'a aucun effet !

  19. #19
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    donc ce que je veux c'est détecter les "BO_" au début et ensuite choisir l'identifiant qui va avec (841 ou 773 ou 1160...)
    c'est ce que tu veut non ?

  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
    oui et ensuite suivant l'identifiant que j'ai eu en lecture je le met en paramètre de la preocédure décoder.

Discussions similaires

  1. Lecture fichier texte à 3 champs séparés par des "|"
    Par Tony-ESAIP dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/07/2014, 09h58
  2. [Débutant] Lecture fichier texte C# Traduction du VB.NET
    Par Dark Nik dans le forum C#
    Réponses: 2
    Dernier message: 06/10/2011, 09h43
  3. Réponses: 3
    Dernier message: 28/11/2010, 19h56
  4. Réponses: 2
    Dernier message: 24/05/2008, 10h14
  5. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05

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