Autor Tema: Obtener porción de una cadena  (Leído 1815 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Obtener porción de una cadena
« 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?

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Obtener porción de una cadena
« Respuesta #1 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é.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Obtener porción de una cadena
« Respuesta #2 en: 04 de Octubre de 2011, 18:43:42 »
En CCS o C18? Porque las funciones que trabajan con string son distintas  :undecided:
No contesto mensajes privados, las consultas en el foro

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Obtener porción de una cadena
« Respuesta #3 en: 04 de Octubre de 2011, 18:44:52 »
Estoy usando C18.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Obtener porción de una cadena
« Respuesta #4 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.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Obtener porción de una cadena
« Respuesta #5 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!
No contesto mensajes privados, las consultas en el foro