TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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?
-
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é.
-
En CCS o C18? Porque las funciones que trabajan con string son distintas :undecided:
-
Estoy usando C18.
-
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.
-
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:
k=0;
while(Trama[k++]!='A');
j=0;
do{
Campo1[j++]=Trama[k++];
}while(Trama[k]!=',');
Y así o similar con las demás.
Saludos!