anounito | 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 :
- while (1)
- int main(int argc, char *argv[]) {
- int rxChar;
- char i;
- i=0;
- FILE* fichiersave = NULL;
- ...
- (...)
- {
- if (read(tty_fd,&rxChar,1)>0)
- {
- fichiersave = fopen(("%s",chaine), "a" ); // j'ouvre un fichier dont l'adresse à était précisé avant
- if (fichiersave != NULL)
- {
- // On écrit dans le fichier
- fprintf(fichiersave, "%02X ",rxChar); //On ecrit en hex les valeur provenant de rxChar
- i++;
- // aprés 19 écriture je passe à la ligne
- if (i==19)
- {
- fprintf(fichiersave,"\n" );
- }
- fclose(fichiersave); // après chaque écriture de rxChar je ferme le fichier c'est pour
- // cette raison la présence du " fprintf(fichiersave, "\n" ); " avec le test
- }
- if (i == 19) // je remet i à 0 aprés les 19 enregistrements
- {
- i=0;
- }
- }
- }
|
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 :
- (...)
- int main(int argc, char *argv[]) {
- int rxChar;
- char i;
- i=0;
- FILE* fichiersave = NULL;
- FILE* fichiernom = NULL;
- char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
- printf("Acme Serial Test (press ctrl-c to exit)\n" );
- if (tty_open(argv[1])<0) {
- fprintf (stderr,"tty open error %s\n", strerror(errno));
- exit(EXIT_FAILURE);
- }
- if (stdin_init()<0) {
- printf("stdin init error %s\n", strerror(errno));
- // exit(EXIT_FAILURE);
- }
- if (signal (SIGINT, termination_handler) == SIG_IGN) signal (SIGINT, SIG_IGN);
- if (signal (SIGHUP, termination_handler) == SIG_IGN) signal (SIGHUP, SIG_IGN);
- if (signal (SIGTERM, termination_handler) == SIG_IGN) signal (SIGTERM, SIG_IGN);
-
- fichiernom = fopen("/mnt/flash/noms/nom.save", "r" );
- if (fichiernom != NULL)
- {
- fgets(chaine, TAILLE_MAX, fichiernom); // On lit maximum TAILLE_MAX caractères du fichiernom, on stocke le tout dans "chaine"
- printf("%s", chaine); // On affiche la chaîne
- fclose(fichiernom);
- }
- /**************************************************************************/
- /******* Partie du code concernée *************************************************/
- while (1)
- {
- if (read(tty_fd,&rxChar,1)>0)
- {
- printf("%02X ",rxChar);
- fichiersave = fopen(("%s",chaine), "a" );
- if (fichiersave != NULL)
- {
- // On écrit dans le fichier
- fprintf(fichiersave, "%02X ",rxChar);
- i++;
- if (i==19)
- {
- fprintf(fichiersave,"\n" );
- }
- fclose(fichiersave);
- }
- if (i == 19)
- {
- printf("\n" );
- i=0;
- }
- }
- }
- return EXIT_SUCCESS;
- }
|
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 |