Gambas France BETA


Pas de compte ? Incription

Problème Comunication serie et Expression rationnelle

Ce sujet est résolu.

1
AuteurMessages
xave4552#1 Posté le 23/5/2015 à 11:21:50
Bonjour à tous,
Voila mon projet, je souhaite comuniquer avec un arduino il doit m'envoyer des données de GPS sous la forme de nombre à virgule flottante.
Coté arduino tout est ok cela fonctionne, cependant etant donné que la liaison serie n'est pas très stable au début, je dois validé les données reçus avec une expression rationnelle sous gambas et c'est la ou les choses ce complique.
Voila les données de mon arduino:
Latitude, Longitude, vitesse, Altitude, Nombre de satelittes, precision
.74199870| 0.2| 108| 4| 434$
$57.99493000|2.699486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156�| 7| 100$
$57.99486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156�| 7| 100$
$57.99486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156900| 0.1| 110| 7| 100$
$57.99486900|2.24156�$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$0.00000000|0.00000000| 0.0| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 0| 0| 0$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$
$57.99486900|2.24157020| 0.3| 110| 7| 100$

Après plusieurs mise au point grâce un testeur d'expression rationnelle, je suis arrivé a celle-ci et elle me valide bien ce que je veux:
\$([+-]?\d+(\.\d+)?)\|([+-]?\d+(\.\d+)?)\|([ *]?( \d+)+(\.\d+)?)\|([ *]?( \d+))\|([ *]?( \d+))\|([ *]?( \d+))\$

En suivant les exemples sur internet (qui sont peux nombreux), j'ai compris qu'il fallait doublé les anti-slash ce que j'ai fait mai cependant je n'est toujours rien.

Voici la fonction:

Dim s As String
Dim tmp As String[]
Dim retour As String
Dim cVal As New Collection
Dim rMatch As New RegExp

Try Read #Sport, Tampon, Lof(Sport)
rMatch.Compile("\\$([+-]?\\d+(\\.\\d+)?)\\|([+-]?\\d+(\\.\\d+)?)\\|([ *]?( \\d+)+(\\.\\d+)?)\\|([ *]?( \\d+))\\|([ *]?( \\d+))\\|([ *]?( \\d+))\\$", RegExp.MultiLine)

tmp = Split(Tampon, "\r\n") 'Tableau bien remplis
For Each s In tmp
If s <> "" Then
rMatch.Exec(s) 'Pas de bug connu
If rMatch.Count = 1 Then 'Jamais rien????
Return rMatch[1].Text
Endif
Endif
Next
Return Retour

Avez vous une idée (Peux être que mon expression n'est pas bonne)?? Car moi je sèche..
Flachy Joe#2 Posté le 23/5/2015 à 16:12:27
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
voila une solution qui n'utilise pas de regexp mais le filtre de la fonction Scan

1
2
3
4
5
6
7
8
9
10
tmp = Split(Tampon, "\r\n")
FOR EACH s IN tmp
tmp2 = Scan(s, "$*|*|*|*|*|*$")
IF tmp2.Count > 0 THEN
IF InStr(tmp2[5], "|") = 0 THEN
'Vérifier éventuellement les plages de valeurs des donnés
RETURN s
ENDIF
ENDIF
NEXT
;) Flachy Joe ;)
Reivillo#3 Posté le 23/5/2015 à 16:24:26
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonjour xave4552, Flachty joe & Autres.

Et toujours en ajustant les Colonnes, voir aussi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC $string AS STRING = "$57.99493000|2.699486900|2.24156900| 0.1| 110| 7| 100$"

PUBLIC SUB Form_Open()

DIM $sElem AS STRING

$string = Replace$($string, "$", "")
PRINT "Latitude", "Longitude", "vitesse", "Altitude", "Nombres satelittes", "precision"
FOR EACH $sElem IN Split($string, "|")
PRINT $sElem,
NEXT
PRINT

END
Reivillo.
Note: Pompé ICI.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Flachy Joe#4 Posté le 23/5/2015 à 16:47:02
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut Reivillo,
le problème c'est que toutes les lignes ne sont pas au bon format et qu'il faut donc éjecter les mauvaises.
;) Flachy Joe ;)
Reivillo#5 Posté le 23/5/2015 à 17:02:24
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »@ Flachy Joe.

En pré-traitement:
Il peut vérifier le nombre de colonnes par ligne, renvoyé par l'arduino!
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
noucom#6 Posté le 23/5/2015 à 22:32:55
Reivillo,
A quoi sert la virgule dans ce code dans ton post ?

1
PRINT $sElem,

Reivillo#7 Posté le 23/5/2015 à 22:49:57
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonsoir noucom.

Elle sert de Séparateur( Tabulation simple ) sur une même Ligne.
Teste la Différence de résultat, entre ces 2 Lignes
1
2
PRINT "un"; "deux"; "trois"
PRINT "un", "deux", "trois"
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Reivillo#8 Posté le 24/5/2015 à 07:49:53
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »@ xave4552.

Et avec ceci:
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
PUBLIC $sHeader AS STRING = "Latitude|Longitude|Vitesse|Altitude|Satelites|Precision"
PUBLIC $sArduino AS STRING = "$57.99486900|2.24156900| 0.1| 110| 7| 100$"

PUBLIC SUB Form_Open()

AFFICHE($sHeader)
AFFICHE($sArduino)

END

PUBLIC SUB AFFICHE($sAffiche AS STRING)

DIM $sData AS String[]
DIM $iNData AS INTEGER = 0
DIM $sShow AS STRING = ""

$sAffiche = Replace$(Replace$($sAffiche, "$", ""), " ", "")
$sData = Split($sAffiche, "|")
IF $sData.Count = 6 THEN
WHILE $iNData < 6
$sShow = $sShow & Space$(15 - Len($sData[$iNData])) & $sData[$iNData]
INC $iNData
WEND
PRINT $sShow
ENDIF

END
Cela donne dans la Console de l'IDE:
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
xave4552#9 Posté le 24/5/2015 à 18:45:47
Bonsoir à tous d'abord merci pour vos réponses,
Je ne pensai pas avoir des réponses aussi rapidement.
Flachy Joe merci, ton premier poste à résolue mon problème, je vais pouvoir maintenant traité les données (est les stocké dans mes objets...) et je dois dirs que je ne connaissé pas cette fonction.
Quant à toi Reivillo tu ma donnée une bonne idée pour fair ma présentation sur mon Raspberry en tous cas merci pour ta dernière fonction je vais m'en servir pour plus tard dans mon projets.
Encor une fois merci à tous.
Tant que j'y suis vous ne seriez comment je pourrai intégré opencv dans gambas?
Merci ++
Reivillo#10 Posté le 24/5/2015 à 19:03:39
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »
Tant que j'y suis vous ne seriez comment je pourrai intégré opencv dans gambas?
! tu devrais plutôt ouvrir un Autre Sujet...
Une Question = Un Sujet.
Plus facile à s'y retrouver par la suite, et à Rechercher. ;)
En tout cas, Merci pour le Retour.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
1