Go Down

Topic: Comment puis supprimer/ignorer les ligne vides (Read 150 times) previous topic - next topic

pierrot10

Bonjour à tous

C'est fonction est importante, mais j'ai du mal a la comprendre. Je suis surement un peu confu car les conditions ne sont pas fermé comme on les apprend a un debutant  :)
Code: [Select]
if(){}
Bref je dois absolument la corrigé pour une autre raison.

Cette fonction va lire un buffer (char buffer[400]) et il mets dans un array, une ligne par index.
Code: [Select]

// buffer_by_line est déclarée au dessus de mon setup ainsi:
// char *buffer_by_line[13];
[code]
void SIM908::bufferByLine(char *buffers, char **buffer_by_line)
{
  Serial.println(F("--"));
  Serial.println(buffers);
  Serial.println(F("--"));

  char *p = buffers;
  byte i = 0;

  buffer_by_line[i++] = p;

  while (*p) {
    if (*p=='\n') {
      *p++ = '\0';
      if (*p=='\r')
        *p++ = '\0';
      if (i<NBLINES)
         buffer_by_line[i++] = p;
    } else
    if (*p=='\r') {
      *p++ = '\0';
      if (*p=='\n')
        *p++ = '\0';
      if (i<NBLINES)
         buffer_by_line[i++] = p;
    } else
      p++;
  }
  while(i<NBLINES)
    buffer_by_line[i++] = p;

}


Cette fonction me retourne ceci, par exemple:

Code: [Select]

0.AT+CMGR=1,1
1.
2.+CMGR: "REC UNREAD","+417634xxxx","","14/10/16,21:57:12+08"
3.dir,r
4.
5.OK

Mais des fois elle retourne ceci
Code: [Select]

0.
1.AT+CMGR=1,1
2.
3.+CMGR: "REC UNREAD","+41763xxxxxx","","14/10/16,21:57:12+08"
4.dir,r
5.
6.OK

Tout ceci parce que le
Code: [Select]
  Serial.println(buffers);
qu'il y a au debut de la fonction affiche (avec un espace pour premiere ligne:
(Les -- sont pour donner des repères
Quote

--

AT+CMGR=1,1

+CMGR: "REC UNREAD","+41763435206","","14/10/16,21:57:12+08"
dir,r

OK
--

Il faut absolument qu'il n'y ai pas de ligne vide en premier. Soit la premiere ligne doit toujours etre 'AT+CMGR=1,1' ou une autre AT command
Code: [Select]

--
AT+CMGR=1,1

+CMGR: "REC UNREAD","+41763435206","","14/10/16,21:57:12+08"
dir,r

OK
--


En fait ce qu'il serait encore mieux de faire c'est de modifier la fonction pour avoir ceci:
Code: [Select]

0.AT+CMGR=1,1
1.+CMGR: "REC UNREAD","+41763xxxxxx","","14/10/16,21:57:12+08"
2.dir,r
3.OK


J'ai du mal a comprendre cette fonction, d'abord. Et j'ai encore plus de mal à trouver ou intervenir pour que les lignes vides soient ignorée et pas indexée dans la variable buffer_by_line.

Je vous remercie pour votre aide!!![/code]
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

fdufnews

Tu pourrais par exemple tester si la ligne est vide à cet endroit et ne pas la mettre dans le tableau si c'est le cas.
Code: [Select]
  while(i<NBLINES)
    buffer_by_line[i++] = p;

pierrot10

Salut,
ben j'ai essayé ceci mais j'ai du mal m'y prendre
Comment le ferais tu?
J'ai essayé ces deux conditions, mais sans succes
Code: [Select]

While(i<NBLINES){
//if(p!='')
if(strlen(p)>0)
{
    buffer_by_line[i++] = p;
}
}
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

B@tto

if(p!=NULL || p!='\n' || p!='\r'  || strcmp(p, "\r\n")!=0)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

fdufnews


Salut,
ben j'ai essayé ceci mais j'ai du mal m'y prendre
Comment le ferais tu?
J'ai essayé ces deux conditions, mais sans succes
Code: [Select]

While(i<NBLINES){
//if(p!='')
if(strlen(p)>0)
{
    buffer_by_line[i++] = p;
}
}


C'est à dire que normalement, avant d'écrire le test on cherche à savoir ce que contient la ligne en question.
Le fait que la chaîne n'affiche rien ne veut pas nécessairement dire qu'elle est vide pour autant.
Donc, on commence par faire afficher la chaîne en hexa pour voir le contenu de celle-ci et ensuite on construit le test adapté.

fdufnews


if(p!=NULL || p!='\n' || p!='\r'  || strcmp(p, "\r\n")!=0)

Il manque quelques étoiles là-dedans il me semble
Code: [Select]
if(p!=NULL || *p!='\n' || *p!='\r'  || strcmp(p, "\r\n")!=0)

B@tto

Yep bien vu j'avais juste repris son code. Du coup ça explique pourquoi le sien ne pouvait pas dans tous les cas fonctionner ...
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Go Up