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 :

Récupérer chaque caractère d'un message de sortie d'un processus "Remuxtool"


Sujet :

VB.NET

  1. #21
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour, j'ai amélioré un peu la procédure ReadOutput :
    J'obtiens ceci :
    Ligne 1 : Message parasite 1
    Ligne 2 : Message parasite 2
    ....
    Ligne n : -
    Ligne n+1 : --
    Ligne n+20 : --------------------
    ...etc

    Il ne me reste plus qu'a filtrer les messages parasites.

    Le code ci-dessous n'est pas très propre mais ça fonctionne correctement.
    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
    42
    43
    44
    45
    46
    47
        Private Sub readOutput()
            Dim buffer As Char() = New Char(0) {}
            Dim BufferMessage As String = ""
     
            Dim DetectCr As Boolean = False
            Dim DetectLf As Boolean = False
            Dim DetectCrLf As Boolean
            Dim PosChar As Integer = 0
     
            While Not MonProcess.HasExited
                MonProcess.StandardOutput.Read(buffer, 0, 1)
                ' Debug.Print(buffer)
     
                Dim ascii As Integer
                ascii = System.Text.ASCIIEncoding.ASCII.GetBytes(buffer)(0)
                'Debug.Print(ascii.ToString)
                BufferMessage += buffer
                Debug.Print(BufferMessage)
     
                Dim VbCr As Byte() = {13}
                Dim VbLf As Byte() = {10}
     
                If buffer = System.Text.ASCIIEncoding.ASCII.GetChars(VbCr) Then
                    DetectCr = True
                    PosChar = 0
                End If
     
                If buffer = System.Text.ASCIIEncoding.ASCII.GetChars(VbLf) Then DetectLf = True
     
                DetectCrLf = False
                If DetectCr And PosChar = 1 Then
                    If DetectLf Then
                        DetectCrLf = True
                        PosChar = 0
                    End If
                    DetectCr = False
                Else
                End If
     
                If DetectCrLf Then
                    BufferMessage = ""
                End If
     
                PosChar += 1
     
            End While
        End Sub
    Un grand merci à ACTIVE_CS et rv26t. Je n'y serais jamais arrivé sans vous .
    Je passe en résolue.

  2. #22
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,

    Pourquoi tu ne fais pas quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If BufferMessage.Contains("-") Then ProgressBar1.Value += 1
    ?

  3. #23
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Pourquoi tu ne fais pas quelque chose du genre:
    If BufferMessage.Contains("-") Then ProgressBar1.Value += 1
    ?
    Oui en effet c'est ce que je vais faire mais c'est un autre formulaire qui me gère à la fois l'affichage des messages en provenance des Processus et l'affichage de la progression. Je ne voulais pas m’étendre sur ce formulaire qui est lui aussi un peu compliqué (à mon niveau) puisque je fait en sorte qu'il puisse m'afficher des messages mêmes si il proviennent de Threads differents et en même temps il filtre les messages en fonction des Processus pour extraire la chaîne qui concerne la progression.
    Je planche la dessus en même temps, c'est pas simple mais je pense que je devrais pouvoir trouver une solution pour faire fonctionner tout ça.

    Encore merci, c'est super sympa de m'avoir aidé.

  4. #24
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Petite amélioration pour ACTIVE_CS
    J'ai utilisé Substring plutot que contains car il se peux que les chaines parasites contiennent un caractère "-" et normalement celles-ci ne devraient pas commencer par "-".

    Si on détecte une chaîne parasite on attend que la chaîne soit complète avant de l'afficher.
    Si on détecte une chaîne de progression on l'affiche immédiatement.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
        Private Sub readOutput()
            Dim buffer As Char() = New Char(0) {}
            Dim BufferMessage As String = ""
            Dim OutPutMessage As String = ""
            Dim DetectCr As Boolean = False
            Dim DetectLf As Boolean = False
            Dim DetectCrLf As Boolean
            Dim PosChar As Integer = 0
     
            While Not MonProcess.HasExited
                MonProcess.StandardOutput.Read(buffer, 0, 1)
                ' Debug.Print(buffer)
     
                Dim ascii As Integer
                ascii = System.Text.ASCIIEncoding.ASCII.GetBytes(buffer)(0)
                'Debug.Print(ascii.ToString)
     
                Dim VbCr As Byte() = {13}
                Dim VbLf As Byte() = {10}
     
                'Detection du retour à la ligne et vidage du BufferMessage
                If buffer = System.Text.ASCIIEncoding.ASCII.GetChars(VbCr) Then
                    DetectCr = True
                    PosChar = 0
                End If
     
                If buffer = System.Text.ASCIIEncoding.ASCII.GetChars(VbLf) Then DetectLf = True
     
                DetectCrLf = False
                If DetectCr And PosChar = 1 Then
                    If DetectLf Then
                        DetectCrLf = True
                        PosChar = 0
                    End If
                    DetectCr = False
                Else
                End If
     
                BufferMessage += buffer
                If BufferMessage.Substring(0, 1) = "-" Then
                    ' Ceci est une ligne de Progresion
                    'IsProgressLigne = True
                    OutPutMessage = BufferMessage
                Else
                    'IsProgressLigne = False
                    OutPutMessage = ""
                End If
     
                If DetectCrLf Then
                    OutPutMessage = BufferMessage
                    BufferMessage = ""
                End If
     
                Debug.Print(OutPutMessage)
                PosChar += 1
     
            End While
        End Sub

  5. #25
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bien vu!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/06/2013, 13h39
  2. Récupérer le message de sortie d'une procédure stockée
    Par akkeri dans le forum Développement
    Réponses: 2
    Dernier message: 10/03/2009, 07h45
  3. [VB6] Récupérer chaque lettre d'un String
    Par DJBORIE dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/03/2006, 17h28
  4. récupérer chaque ligne d'une requête ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/11/2005, 09h15
  5. Changer chaque caractère d'une chaîne
    Par YanK dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2005, 19h01

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