Autor Tema: Extraer datos de string  (Leído 1715 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Extraer datos de string
« en: 13 de Mayo de 2015, 01:36:05 »
Hola, Estoy usando el modulo wifi ESP8266, el cual tiene un comando de envío y uno respuesta así:
AT+CIPSEND=id,len      >>   para enviar
> data

+IPD,id,len:data          >> cuando recibe


Pues bien,necesito extraer: id,len,data, el id no me importa mucho, porque se que siempre va hacer 0, pero si el tamaño y el dato.
para ello voy con esta idea:

Para extraer el len
Código: [Seleccionar]
// Hallar len                  
 int get_len(char* buffer)
{
   char len[3];
   int n;
  if(find_string(buffer1,"+IPD")){       // +IPD,id,len:data
   for(n=0;buffer[n]!=0;n++)
   {
      if(buffer[n]==',')  // halla el primer "," y en mi caso siempre mínimo va hacer de 3 dígitos la longitud del buffer
      {
         len[0]=buffer[n+1];
         len[1]=buffer[n+2];
         len[2]=buffer[n+3];
      }
   }
   return(atoi(len));
}


Para extraer el dato

Código: [Seleccionar]
// Hallar data
 void  get_data(void)
{
   char data[255];
   int n;
  if(find_string(buffer1,"+IPD")){       // +IPD,id,len:data
   for(n=0;buffer[n]!=0;n++)
   {
      if(buffer[n]==':')  // a partir del ":"
      
      i=0;                          
                  do{                             // Extraer ID del buffer a partir ":" y hasta \0.
                    data[i]=buffer1[n+1]; n++;    //
                  }while(buffer1[++i]!=0x00);     //      
   }
   return(data);
}



Es solo una idea, por favor me ayudan a mejorarla.
Gracias

« Última modificación: 13 de Mayo de 2015, 01:49:11 por cvargcal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Extraer datos de string
« Respuesta #1 en: 13 de Mayo de 2015, 02:06:59 »
Yo no se si siempre la respuesta es asi, si siempre es asi haria algo de esta forma:

Código: C
  1. get_datos(char* buffer)
  2. {
  3.    char resultado[4][10];
  4.    int n,j=0,k=0;
  5.  
  6. // Separo en comas
  7.  
  8. for(n=0;buffer[n]!='\0',n++)
  9. {
  10.    resultado[j][k++] = buffer[n];
  11.    if(buffer[n]==',') resultado[j][k]='\0'; j++; k=0;
  12. }
  13. resultado[j][k]='\0';
  14.  
  15. // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = len:data
  16. // Separo en :
  17.  
  18. k=0;
  19. j=3;
  20. for(n=0;resultado[2][n]!='\0',n++)
  21. {
  22.    resultado[j][k++] = resultado[2][n];
  23.    if(resultado[2][n]==':') resultado[j][k]='\0'; j--; k=0;
  24. }
  25.    resultado[j][k]='\0';
  26. }
  27.  
  28. // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = data , resultado[3] = len

CREO que funciona xD, no te puedo decir a ciencia cierta ya que estoy re dormido xD
« Última modificación: 13 de Mayo de 2015, 02:13:10 por KILLERJC »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re: Extraer datos de string
« Respuesta #2 en: 13 de Mayo de 2015, 16:45:12 »
Yo no se si siempre la respuesta es asi, si siempre es asi haria algo de esta forma:

Código: C
  1. get_datos(char* buffer)
  2. {
  3.    char resultado[4][10];
  4.    int n,j=0,k=0;
  5.  
  6. // Separo en comas
  7.  
  8. for(n=0;buffer[n]!='\0',n++)
  9. {
  10.    resultado[j][k++] = buffer[n];
  11.    if(buffer[n]==',') resultado[j][k]='\0'; j++; k=0;
  12. }
  13. resultado[j][k]='\0';
  14.  
  15. // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = len:data
  16. // Separo en :
  17.  
  18. k=0;
  19. j=3;
  20. for(n=0;resultado[2][n]!='\0',n++)
  21. {
  22.    resultado[j][k++] = resultado[2][n];
  23.    if(resultado[2][n]==':') resultado[j][k]='\0'; j--; k=0;
  24. }
  25.    resultado[j][k]='\0';
  26. }
  27.  
  28. // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = data , resultado[3] = len

CREO que funciona xD, no te puedo decir a ciencia cierta ya que estoy re dormido xD


Si funciona, excelente. Gracias



Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re: Extraer datos de string
« Respuesta #3 en: 13 de Mayo de 2015, 16:46:16 »
Te recomiendo dar un vistazo a la librería string.h Tiene unas cuantas funciones para tratar los string.

Por ejemplo STRCHR (string,','), te busca la primera , y te da su posición. Con STRRCHR (string,',') (Creo que se escribe así), te daría la posición de la última. Yo en alguna ocasión la he utilizado y es muy útil y universal, ya que aunque varíe el tamaño, sigue detectando en este caso las comas y te da su posición. Una vez que tienes su posición, únicamente copias la diferencia.

Saludos

Si, esa librería tiene todo ya listico, :) gracias.