Extraire données d'une chaine de caractères avant de l'afficher [Résolu]

Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 09:11 - Dernière réponse :
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 17:50
Bonjour,

Je suis complètement débutant. J'ai réussi à modifier un petit terminal série (RS232) que j'ai récupéré sur la toile en y ajoutant mes éléments.
Toutefois je suis ennuyé pour extraire des caractères d'une chaine. J'utilise ceci pour la "non extraction":

Private Sub ReceivedText(ByVal [text] As String)
'compares the ID of the creating Thread to the ID of the calling Thread
If Me.rtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.rtbReceived.Text &= [text]
End If

If text = "RDL*" Then
btnRFOFF.Enabled = True
btnSend.Enabled = True
btnRFON.Enabled = False
Me.txtAction.Text = "Couper la RF puis RF OFF"
End If

If text = "RDH*" Then
btnRFOFF.Enabled = False
btnRFON.Enabled = True
Me.txtAction.Text = "Mettre la RF puis RF ON"
End If

If text = "COK*" Then
Me.txtAction.Text = "Calibration Terminée"
btnRFOFF.Enabled = False
btnRFON.Enabled = False
End If

End Sub


Comme vous le voyez, j'ai réussi à faire réagir le programme si je reçois dans text RDL* ou RDH* ou encore COK*
Par contre je peux recevoir d'autres choses comme: ATT123456* et je désirerais afficher 123456 seulement. C'est à dire que je voudrais extraire cette valeur en chaine et peut-être aussi en valeur numérique.(ce pourrait être un plus si je désire ultérieurement effectuer des opérations)

Mes réceptions sur le port série se terminent toujours par "*" par contre la longueur de la valeur que je reçois (123456) peut être sur 3 à 6 caractères.

Ces données sont envoyées par un µControleur PIC que je programme en basic, mais je débute avec VB.net

Merci de votre aide, liens où pistes pour ma solution

Amicalement
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
- 28 nov. 2011 à 16:13
3
Merci
Re:
Si tu programmes des µC, tu verras vb.net c'est rien à coté, c'est juste une habitude.
Merci pour melabs PICBASIC PRO je vais chercher un peu, moi j'avais un vieux truc (Basic11) qui était un peu limité.
Et je suis sous la pluie de Goyave




CF2i - Guadeloupe
Ingénierie Informatique

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 28 nov. 2011 à 09:41
0
Merci
Boinjour,

je pense que tu ne devrais rencontrer aucune difficulté à transposer pour VB.Net ce petit bout de code/exemple :

toto = "ATT123456*"
  titi = StrReverse(Val(StrReverse(Left(toto, Len(toto) - 1))))
  MsgBox titi

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 10:26
0
Merci
Bonjour ucfoutu

Merci pour ton exemple mais je dois peut-être déjà m'assurer que c'est bien "ATT" les 3 premiers bytes reçus, car il peut y avoir d'autres messages encore... du genre VLO123456*

Sur mon PIC j'écrirais un truc du genre:
IF bytesIn[0] = 65 and BytesIn[1] = 84 and BytesIn[2] = 84 THEN ' (ATT)
je prends les caractères suivants jusqu'à "*"
éventuellement je passe de l'ascii au numérique en retirant 48
et j'envoie sur mon afficheur.

C'est possible de faire un truc de ce genre ?

Big merci
Commenter la réponse de harryweb77
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 28 nov. 2011 à 11:09
0
Merci
Que les premiers caractères soient "ATT", "trucmachin" ou autres, mon code traitre toute chaine se terminant par un "*" (ou tout autre caractère, pourvu qu'il n'y en ait qu'un) !
Ainsi, il retirerait (par exemple) "879" de toute chaine commençant par ce que tu veux et se terminant par un caractère à ne pas prendre en compte !
Exemple, donc "gkgjhhlljkl879m" retournerait "879"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 28 nov. 2011 à 11:12
0
Merci
Mais si tu veux dire qu'en plus cela doit commencer par "ATT" suivoi d'un chiffre, rien de plus simple ! ===>> une expression conditionnelle :
If ta_chaine like "ATT#" then
'le traitement montré
end if

Quiel est le problème ? Je n'en vois pas.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 12:18
0
Merci
Ok, j'essaye d'expliquer mieux...

Ton code me convient pour extraire la chaine 123456.
Maintenant comment mon programme peut se rendre compte que les 3 premiers caractères sont ATT ou autres ?

Car tu me donnes:
[i]If ta_chaine like "ATT#" then
'le traitement montré
end if /i


Ce qui suivra ATT, c'est une suite de chiffres selon une valeur au départ inconnue

Ce que je cherche à faire c'est:

1) Je vérifie si mes 3 premiers caractères sont bien ATT
2) Si oui je prélève les chiffres (avec ta formule et le -1 cela doit coller)
3) J'affiche ces chiffres


J'ai utilisé ton dernier exemple de code en l'inserant à la suite de ce qui marche déjà, chez moi, juste pour voir s'il discernait ATT,(avant d'extraire le reste) comme ceci:

[i] If text Like "ATT#" Then
Me.txtAction.Text = "reçu"
'le traitement montré
End If/i

Et j'ai envoyé ATT123456* ou ATT ou encore ATT# sans qu'il ne m'affiche "reçu". Aucune réaction en fait.

Merci
Commenter la réponse de harryweb77
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 28 nov. 2011 à 12:38
0
Merci
Ouais.
Je vois que tu as "tout compris"... et ... te laisse planté maintenant là (à d'autres d'essayer de t'éveiller)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 28 nov. 2011 à 13:05
0
Merci
Salut

D'abord tu doit savoir la structure de ta chaine
donc est ce que c'est
XYZ1234455678

XYZ :3 caractères non numérique
ou c'est une autre structure ?
et tu veux extraire la suite de nombre de la
chaine ?
Commenter la réponse de cs_ShayW
- 28 nov. 2011 à 13:13
0
Merci
Salut tout le monde

Oui s'il y a des numériques et des lettres tu peux faire comme ça:
        Dim Toto As String = "toto458titi"
        Dim Var As String = "toto"
        Do
            Var &= "?"
        Loop Until Var.Length = Toto.Length
        If Toto Like Var Then Me.Text = Toto


Question: c'est quoi ton PIC?


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 13:44
0
Merci
Salut les gars,

@ShayW: Oui c'est théoriquement 3 caractères ascii (en majuscule) puis la valeur que mon pic envoie.

Je dis théoriquement car c'est une transmission série classique mais par RF et il peut y avoir des parasites... Alors on reçoit.. n'importe quoi... Alors j'envoie la trame 3 fois pour assurer un peu, puis je fais des accusés de RX.

@Acive: Je vais essayer une approche avec ton bout de code en l'adaptant... J'espère y arriver enfin. Le pic, pour cette application est un 18F14K22 avec lequel j'utilise l'USART hardware, mais la trans par RF (avec des modules bon marché OOK - AM) ne se laisse pas toujours faire ;-)
Sinon j'utilise un grand nombre de pics différents... jusqu'au 18F8520
avec PBP PRO 2.60

PS: En Gwada ? Petit veinard ! J'adore...
Commenter la réponse de harryweb77
- 28 nov. 2011 à 14:11
0
Merci
Oui mais il pleut...

Je programme des 68HC11, mais je voudrais m'y mettre aux pics, tu les programmes en basic? Avec un compilateur assembleur?




CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 28 nov. 2011 à 14:39
0
Merci
tu peux comme ça théoriquement

Dim chaine As String
 Dim numeric As String
 chaine = "XYZ123456*"
 numeric = chaine.Substring(3, chaine.Length - 4)
Commenter la réponse de cs_ShayW
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 14:59
0
Merci
@Acive: Oui, il existe plusieurs compilateurs basic (mikro basic, Proton, Et melabs PICBASIC PRO (celui que j'utilise depuis 10 ans car il a un forum débordant d'astuces)) Mais j'avoue que programmer les µC n'a rien à voir avec vb.net, d'où mes errances... ).... Que je serais heureux sous la pluie de Deshaie

@ShayW: OK, merci pour cet exemple... Je bosse un peu sur tout ce qu'on m'a donné, tout en apprenant vb.net
Je vais bien y arriver, à tourner ça comme il faut pour mon application.
Sinon, je reviendrais en
Je me donne un peu de temps pour expérimenter.

Peut-être à bientôt quand même !
Merci
Commenter la réponse de harryweb77
Messages postés
6
Date d'inscription
vendredi 25 novembre 2011
Dernière intervention
28 novembre 2011
- 28 nov. 2011 à 17:50
0
Merci
bien bien, j'y suis arrivé... Merci à vous 3 !
Commenter la réponse de harryweb77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.