Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
714 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Créer un tableau + trier des données avant envoi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Créer un tableau + trier des données avant envoi

n°1877684
anounito
Posté le 25-04-2009 à 12:49:54  profilanswer
 

Bonjour, Étant pas très doué dans les tableaux et les chaines de caractères, je cherche à créer un tableau de 19 colonne séparés par des espaces puis faire un test sur les données inscrites. En effet le tableau est déjà fait , enfin un truc qui ressemble à un tableau ds le résultat seulement (je met le code plus bas) par contre je n'arrive pas faire le test sur les données:
 
 --> Si les données commencent par 02 et se termine par 03 et qu'il y a 19 valeurs--> OK on passe à la suite (on passe à la ligne et on écrit une nouvelle chaine de 19 données), sinon on rejette et on attend un nouveau 02 ... <19 valeur> ... 03.
 
Ex.:
02 EA 61 02 11 00 00 00 00 00 00 00 00 00 00 00 00 00 03 --> OK       | On Garde
02 EA 53 00 A0 00 00 00 00 00 00 00 00 00 00 00 03 --> No Ok           | On rejette  
02 EA F0 01 0C 00 00 00 00 03 00 00 00 00 00 00 00 00 00  --> No Ok  | On rejette  
...
 
Mon code qui me permet d'enregistrer mes données:
 

Code :
  1. while (1)
  2. int main(int argc, char *argv[]) {
  3.   int rxChar;
  4.   char i;
  5.   i=0;
  6.   FILE* fichiersave = NULL;
  7.   ...
  8. (...)
  9. {
  10.         if (read(tty_fd,&rxChar,1)>0)
  11. {
  12.  fichiersave = fopen(("%s",chaine), "a" ); // j'ouvre un fichier dont l'adresse à était précisé avant
  13.  if (fichiersave != NULL)
  14.  {
  15.   // On écrit dans le fichier
  16.   fprintf(fichiersave, "%02X ",rxChar); //On ecrit en hex les valeur provenant de rxChar
  17.   i++;
  18.                         // aprés 19 écriture je passe à la ligne  
  19.   if (i==19)
  20.   {
  21.   fprintf(fichiersave,"\n" );
  22.   }
  23.    fclose(fichiersave); // après chaque écriture de rxChar je ferme le fichier c'est pour
  24.                                                      // cette raison la présence du " fprintf(fichiersave, "\n" ); " avec le test
  25.   }
  26.   if (i == 19)  // je remet i à 0 aprés les 19 enregistrements  
  27.   {
  28.    i=0;
  29.   }
  30. }
  31. }


 
Je ne sait pas comment m'y prendre pour faire ce test des " 02  - 19 valeurs -  03 " j'ai fait un petit code pour faire ce test ça ma donnée un truc bizarre !
si quelqu'un à une idée de comment faire je le remercie d'avance
 
Ici Le mm code mais ss modifications
 

Code :
  1. (...)
  2. int main(int argc, char *argv[]) {
  3.   int rxChar;
  4.   char i;
  5.   i=0;
  6.   FILE* fichiersave = NULL;
  7.   FILE* fichiernom = NULL;
  8.   char chaine[TAILLE_MAX] = "";  // Chaîne vide de taille TAILLE_MAX
  9.   printf("Acme Serial Test (press ctrl-c to exit)\n" );
  10.   if (tty_open(argv[1])<0) {
  11.    fprintf (stderr,"tty open error %s\n", strerror(errno));
  12.   exit(EXIT_FAILURE);
  13.   }
  14.   if (stdin_init()<0) {
  15.    printf("stdin init error %s\n", strerror(errno));
  16. //  exit(EXIT_FAILURE);
  17.   }
  18.   if (signal (SIGINT, termination_handler) == SIG_IGN) signal (SIGINT, SIG_IGN);
  19.   if (signal (SIGHUP, termination_handler) == SIG_IGN) signal (SIGHUP, SIG_IGN);
  20.   if (signal (SIGTERM, termination_handler) == SIG_IGN) signal (SIGTERM, SIG_IGN);
  21.  
  22.   fichiernom = fopen("/mnt/flash/noms/nom.save", "r" );
  23.   if (fichiernom != NULL)
  24. {
  25.  fgets(chaine, TAILLE_MAX, fichiernom);  // On lit maximum TAILLE_MAX caractères du fichiernom, on stocke le tout dans "chaine"
  26.  printf("%s", chaine);      // On affiche la chaîne
  27.   fclose(fichiernom);
  28. }
  29. /**************************************************************************/
  30. /******* Partie du code concernée *************************************************/
  31.   while (1)
  32. {
  33.  if (read(tty_fd,&rxChar,1)>0)
  34.  {
  35.   printf("%02X ",rxChar);
  36.   fichiersave = fopen(("%s",chaine), "a" );
  37.   if (fichiersave != NULL)
  38.   {
  39.    // On écrit dans le fichier
  40.    fprintf(fichiersave, "%02X ",rxChar);
  41.    i++;
  42.    if (i==19)
  43.    {
  44.    fprintf(fichiersave,"\n" );
  45.    }
  46.    fclose(fichiersave);
  47.   }
  48.   if (i == 19)
  49.   {
  50.    printf("\n" );
  51.    i=0;
  52.   }
  53.  }
  54. }
  55.  return EXIT_SUCCESS;
  56. }


 
la sorti de ce code se fait en 2 parties:  
1) sur la console de Linux
2) une copie dans mon fichier (le plus important)
 
ex. correcte:
...
02 EA 42 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
02 EA 43 00 7A 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
02 EA 43 00 7D 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
02 EA 43 00 77 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
02 EA 44 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
02 EA 4D 01 79 00 00 00 00 00 00 00 00 00 00 00 00 00 03  
...
 
 
un exemple de ce que je veux éviter:
Ex.incorrecte:
...
02  EA  3D  00  3F  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
02  EA  3D  00  3C  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
00  00  00  00  00  00  00  03  02  EA  3C  00  36  00  00  00  00  00  00
02  EA  47  00  BC  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
02  EA  4E  01  C2  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
...
 
 
ou encore:
...
02  EA  3D  00  3D  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
02  EA  32  00  51  00  00  00  00  00  00  00  00  00  00  00  00  00  03  
02  EA  63  02  03  01  00  00  00  00  00  00  00  00  00  00  00  00  03  
02  EA  64  02  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  --> à cause de cette ligne le reste n'est plus valable pour moi, le 02 de ce qui devait être la ligne suivante a été décalé juste parce qu'il manquait une valeur!!  
EA  64  02  17  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  
EA  64  02  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  EA  
64  02  0A  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  EA  
64  02  12  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  EA  
64  02  21  01  00  00  00  00  00  00  00  00  00  00  00  00  03  02  EA

...
 
 
 
J'attend votre aide!
Merci

Message cité 1 fois
Message édité par anounito le 25-04-2009 à 22:21:24
mood
Publicité
Posté le 25-04-2009 à 12:49:54  profilanswer
 

n°1877806
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-04-2009 à 00:03:47  profilanswer
 

anounito a écrit :

Bonjour, Étant pas très doué dans les tableaux et les chaines de caractères, je cherche à créer un tableau de 19 colonne séparés par des espaces puis faire un test sur les données inscrites. En effet le tableau est déjà fait , enfin un truc qui ressemble à un tableau ds le résultat seulement (je met le code plus bas) par contre je n'arrive pas faire le test sur les données:
 
 --> Si les données commencent par 02 et se termine par 03 et qu'il y a 19 valeurs--> OK on passe à la suite (on passe à la ligne et on écrit une nouvelle chaine de 19 données), sinon on rejette et on attend un nouveau 02 ... <19 valeur> ... 03.


Oui, c'est une bête machine à état avec un compteur...  
 
Commence par recenser les évènements, puis, décrit les états et enfin les transitions, c'est à dire les évènements qui font changer l'état. Ensuite tu associes des actions aux transitions si nécessaire...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1877971
anounito
Posté le 26-04-2009 à 19:05:39  profilanswer
 

Et comment je peu faire cette machine à état, je vois ce que tu veux dire mais je ne sais comment y procéder !!!
 
voilà j'ai écrit ce code, mais je doute de son efficacité.
 

Code :
  1. while (1)
  2. {
  3.  if (read(tty_fd,&rxChar,1)>0)
  4.  {
  5.   fichiersave = fopen(("%s",chaine), "a" );
  6.   if (fichiersave != NULL)
  7.   {
  8.    for (i=0; i<19; i++)
  9.    {
  10.     tab[i] = rxChar;  //rxChar étant mes données et tab est déclaré " long tab[19]; "
  11.    }
  12. /* on faite ici ya un problème parce que si mes donnée arrivent comme ça :
  13. .
  14. 02 EA 63 02 03 01 00 00 00 00 00 00 00 00 00 00 00 00 03  
  15. 02 EA 64 02 01 00 00 00 00 00 00 00 00 00 00 00 00 03 02 --> ici j'ai mon tableau des 19 caractères mais se terminant par un 02 parce qu'il manque une valeur et le faite qu'il manque cette valeur, y'aura un décalage et ma premiére valeur sera tt le tps déférente de 02 par après, et donc ne sera pas envoyé avec mon code qui suit !!!
  16. EA 64 02 17 01 00 00 00 00 00 00 00 00 00 00 00 00 03 02  
  17. EA 64 02 01 00 00 00 00 00 00 00 00 00 00 00 00 03 02 EA
  18. 64 02 0A 01 00 00 00 00 00 00 00 00 00 00 00 00 03 02 EA  
  19. */
  20.    if (tab[0]==02 && tab[18]==03)
  21.    {
  22.     fprintf(fichiersave, "%02X ",tab[]);
  23.    }
  24.    if (i==19)
  25.    {
  26.     fprintf(fichiersave,"\n" );
  27.     i=0;
  28.    }
  29.   fclose(fichiersave);
  30.   }
  31.  }
  32. }
  33. return EXIT_SUCCESS;
  34. }


 
Bon si quelqu'un à une petite idée ce sera trééés gentille de ça part.
Merci

n°1878025
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-04-2009 à 22:39:14  profilanswer
 

anounito a écrit :

Et comment je peu faire cette machine à état, je vois ce que tu veux dire mais je ne sais comment y procéder !!!


J'ai indiqué la marche à suivre. Pour le moment, il n'y a aucun code à écrire, seulement de la spécification détaillée...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1878066
anounito
Posté le 27-04-2009 à 09:19:05  profilanswer
 

Merci pour tes précisions, mais moi je m'attend à un début de code, ou qu'on me corrige le code que j'ai mit.
 
Merci !


Message édité par anounito le 27-04-2009 à 09:19:31

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Créer un tableau + trier des données avant envoi

 

Sujets relatifs
Extraire que certaines données d'un fichier csvprobleme de include en melangeant C et C++
créer un fichier avec OutputStreamsqrt et compilateur Visual C++
créer projet à partir de code sous visual studio 2008 [10€!]Problème d'envoi de mail avec php
[RESOLU] - [C#] - Lancement et Création de ThreadDebutante : modification des données d'une bdd sous php
[C][GTK] Problème de signal_connect[outlook 2003] Formulaire personalisés : créer un bouton "Répondre"
Plus de sujets relatifs à : [C] Créer un tableau + trier des données avant envoi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR