Go Down

Topic: Processing: reconnaître le contenu d'un string (Read 1 time) previous topic - next topic

FP24V

Dec 11, 2010, 01:06 pm Last Edit: Dec 11, 2010, 01:06 pm by FP24V Reason: 1
bonjour à tous

je me permet de vous solliciter car j'ai un petit soucis avec un prg sous processing.

je reçois des données série venant de plusieurs appareil donc je ne peux par forcement corrigé les erreur de transmition.

J'utilise un filtre qui me permet de trier les données:

Code: [Select]


String xString2 = myPort2.readStringUntil('\n');  // lecture série jusqu'au saut de ligne
   if (xString2 != null)  // si la chaîne n'est pas vide
   {
     
     xString2 = trim(xString2);  // on vire les éventuels espace devant et derrière au cas où...

     int in = xString2.indexOf("PTEC");
     if (in==0)
     {PTEC=xString2.substring(in+5,in+9);}
     
     in = xString2.indexOf("DEMAIN");
     if (in==0)
     {DEMAIN=xString2.substring(in+7,in+11);}
     
     in = xString2.indexOf("ISOUSC");
     if (in==0)
     {ISOUSC=int(xString2.substring(in+7,in+9));}
     
     in = xString2.indexOf("IINST");
     if (in==0)
     {IINST=int(xString2.substring(in+6,in+9));}
     
     in = xString2.indexOf("PAPP");
     if (in==0)
     {PAPP=int(xString2.substring(in+5,in+10));}
     
     in = xString2.indexOf("BBRHCJB");
     if (in==0)
     {BBRHCJB=int(xString2.substring(in+8,in+17));}
     
     in = xString2.indexOf("BBRHCJW");
     if (in==0)
     {BBRHCJW=int(xString2.substring(in+8,in+17));}
     
      in = xString2.indexOf("BBRHCJR");
     if (in==0)
     {BBRHCJR=int(xString2.substring(in+8,in+17));}
     
     in = xString2.indexOf("BBRHPJB");
     if (in==0)
     { BBRHPJB=int(xString2.substring(in+8,in+17));}
     
     in = xString2.indexOf("BBRHPJW");
     if (in==0)
     {BBRHPJW=int(xString2.substring(in+8,in+17));}
     
      in = xString2.indexOf("BBRHPJR");
     if (in==0)
     {BBRHPJR=int(xString2.substring(in+8,in+17));}
     
     in = xString2.indexOf("IMAX");
     if (in==0)
     {IMAX=int(xString2.substring(in+5,in+8));}
   }



mon soucis est le suivant, comme je connais le contenu de ce que je cherche,  je stock en STRING certaine donnée, et d'autre en INT. mais quand l'appareil qui envoie bug et envoie une lettre à un endroit ou je n'attend que des chiffres, processing plante avec une jolie erreur null point exception.

Résultat arduino planté et plus de chauffage dans la maison.

Alors je voudrais savoir s'il est possible, avant d'utiliser certaine donnée "d'analyser" ce qui arrive de maniére a ce que:

Code: [Select]


si (donnée reçus==chiffres seulement)
 {utilisé les données;}

sinon {jeté les données reçus}




merci d'avance

flo
Je ne conçois que trés peu, je recycle beaucoup les codes que je trouve.

Jean-François

#1
Dec 11, 2010, 01:13 pm Last Edit: Dec 11, 2010, 01:38 pm by jfs Reason: 1
Regarde du coté de la fonction match(), éventuellement avec une regexp.

Tu reçois tes strings tels quels, ou est ce que tu reçois des char que tu formates ensuite en string ?
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

FP24V

heu....
les données arrive sur le port série, mise en string juste aprés ou int selon le type de données reçus
Je ne conçois que trés peu, je recycle beaucoup les codes que je trouve.

Jean-François

#3
Dec 11, 2010, 01:57 pm Last Edit: Dec 11, 2010, 02:00 pm by jfs Reason: 1
C'est coté Arduino ou coté Processing que tu as un soucis ?

Si tu reçois tes "caractères" un a un, tu peux les comparer à 0-1-2-3...etc et si a 9 il n'y a pas eu de concordance.... c'est que ce n'est pas un chiffre  ;D
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

FP24V

je suis uniquement sur le processing, l'arduino n'est pas utilisé pour le moment.



Je ne conçois que trés peu, je recycle beaucoup les codes que je trouve.

Jean-François

#5
Dec 11, 2010, 04:18 pm Last Edit: Dec 11, 2010, 04:21 pm by jfs Reason: 1
Peut être une solution ici :

http://www.commentcamarche.net/forum/affich-5845316-java-suppression-lettres-dans-string

Est ce que c'est toujours les mêmes caractères qui viennent polluer ta string ?
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#6
Dec 12, 2010, 06:12 pm Last Edit: Dec 12, 2010, 06:19 pm by jfs Reason: 1
En utilisant splitToken():

Code: [Select]

String[] inString = splitTokens(inStringTest, "0123456789"); // sépare la string à chaque chiffre  et le supprime de la string ...
if (inStringTest.length >0){  //  ou inStingTest.length() ... dans ce cas je ne sais pas lequel il faut ;-)
laisse tomber inString;
}
else {
utilise inString;
}


Après ton test, si le tableau inStringTest est vide, tu peux utiliser inString, car elle ne comporte que des chiffres.... si je me suis pas foutu dedans  ;D
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

FP24V

ba je vai essayer dés que j'aurai refabriquer un module edf, l'autre à eu chaud au patte


merci
Je ne conçois que trés peu, je recycle beaucoup les codes que je trouve.

Go Up