Bonsoir je reçois des données sur le port série, au quel j'applique un traitement, je trouve mon code un peu lourd, pensez vous que je peux le réduire ?
d'abord mon data_received :
ici mon sub affiche_ASCII ;
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 Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte RS232.Read(trame, 0, nb_octet) 'on lit le port Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII 'L'évènement DataReceived se situe sur un thread différent que le form, nous devons donc appelé un délégué pour afficher le résultat à l'écran If Me.InvokeRequired Then Me.Invoke(New _Affiche_ASCII(AddressOf Affiche_ASCII), donnee) End If 'ici je stocke les données recu dans un fichier Dim monStreamWriter As StreamWriter = New StreamWriter("C:\trame.txt", True, System.Text.Encoding.ASCII) 'Variable permettant l'ecriture et la lecture Dim SWrite As StreamWriter Dim TexteAEcrire As String = donnee 'Le cree SWrite = monStreamWriter 'Ecrire SWrite.WriteLine(TexteAEcrire) 'Le fermet SWrite.Close() 'Reinitialiser la variable d'ecriture SWrite = Nothing End Sub
et enfin ma fonction extraction qui recupére le texte compris entre deux mots de la variable 'attente' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Affiche_ASCII(ByVal donnee As String) 'ici j'affecte les données recu dans mon textbox2.text qui n'est pas visible pour l'utilisateur TextBox2.Text = TextBox2.Text & donnee For Each ligne As String In TextBox2.Text Try 'ici je met dans ma variable attente je remplace certains caractéres reçus par un vide"" attente = TextBox2.Text.Replace(Chr(10), ControlChars.CrLf).Replace("W1", "").Replace("W1", "").Replace("W1E", "").Replace("W1E", "").Replace("W0F", "").Replace("E", "").Replace("F", "") 'ensuite je transfert le tout dans ma textbox1 pour l'afficher à l'utilisateur mais avant j'applique la fonction extraction TextBox1.Text = Extraction(attente) Catch ex As Exception End Try Next End Sub
Voila comme je suis débutant, je trouve ça un peu lourd comme code, peut être qu'il y a moyen de faire plus simple ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Public Function Extraction(ByVal attente As String) As String Dim motARechercher1 As String = "Intervention" Dim motARechercher2 As Char = "Alerte" Dim fin1 As Integer = attente.IndexOf(motARechercher1, 0, System.StringComparison.InvariantCultureIgnoreCase) Dim fin2 As Integer = attente.IndexOf(motARechercher2, 0) Return attente.Substring(fin1, fin2) End Function
Partager