TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jorgejg en 04 de Octubre de 2011, 18:31:48

Título: Obtener porción de una cadena
Publicado por: jorgejg en 04 de Octubre de 2011, 18:31:48
Tengo una cadena de la cual quiero extraer unos cuantos caracteres de la misma. Tengo definido:
char trama[40]=""; //aqui almaceno lo que recibo por USART
char *ptr_trama;
char *ptr_busca;

Por ejemplo: si recibo en "trama" la cadena "[C01]: Abcd,16w9 xyz" necesito extraer "Abcd" y almacenarlo en un array luego tambien extraer la cadena "16w9" y enviar por el USART una cadena de la siguiente forma "resultado=Abcd+16w9"

He usado memchr y strchr para obtener la posición donde empieza el caracter 'A' de "Abcd", tengo el puntero pero no logro dar formato y enviar por USART.

Alguna sugerencia?
Título: Re: Obtener porción de una cadena
Publicado por: jorgejg en 04 de Octubre de 2011, 18:43:16
Ya tengo una parte, el problema es que estaba definiendo char cpytrama[10] en vez de cpytrama[10]=""
Ahora queda asi:

char cpytrama[10]="";
char trama[40]="";
char *ptr_busca;

ptr_busca = strncat(cpytrama, trama,3);//copio 3 caracteres de trama y lo almaceno en cpytrama
printf( "\r\nCopiado:%s", cpytrama);

pero esto me copia desde el principio 3 caracteres pero yo necesito desde otra posición supongo que primero debo capturar el puntero y de ahi aplico strncat, probaré.
Título: Re: Obtener porción de una cadena
Publicado por: Suky en 04 de Octubre de 2011, 18:43:42
En CCS o C18? Porque las funciones que trabajan con string son distintas  :undecided:
Título: Re: Obtener porción de una cadena
Publicado por: jorgejg en 04 de Octubre de 2011, 18:44:52
Estoy usando C18.
Título: Re: Obtener porción de una cadena
Publicado por: jorgejg en 04 de Octubre de 2011, 19:01:04
Funcionó:

ptr_busca = strchr(trama,'A');//obtengo dirección del caracter "A" en la trama ...
ptr_busca = strncat(cpytrama, ptr_busca,3);//... y a partir de ahi muestro 3 caracteres
printf( "\r\nCadena de 3 caracteres:%s", cpytrama);

Disculpen la molestia, estuve todo el dia con esto y nada, espero le sirva a alguien de paso.
Título: Re: Obtener porción de una cadena
Publicado por: Suky en 04 de Octubre de 2011, 19:02:53
Las cadenas siempre traen la misma cantidad de caracteres, o es variable pero tienen cierto separador? Por ejemplo, al recibir una cadena desde un GPS el separador es un coma (,) y se pueden recibir desde ningún caracteres hasta 9, dependiendo del campo.

Recorriendo la trama mediante punteros o indices también es posible, más lento eso si, por ejemplo:

Código: C
  1. k=0;
  2. while(Trama[k++]!='A');
  3. j=0;
  4. do{
  5.    Campo1[j++]=Trama[k++];
  6. }while(Trama[k]!=',');


Y así o similar con las demás.


Saludos!