Foros del Web » Programación para mayores de 30 ;) » Programación General »

ayuda para separar datos de un buffer

Estas en el tema de ayuda para separar datos de un buffer en el foro de Programación General en Foros del Web. Buenas, tengo un problema. Expongo lo que quiero conseguir: dentro de un programa un usuario me debe entrar por teclado: mensaje 12.3.32.32 hola como estas. ...
  #1 (permalink)  
Antiguo 04/06/2005, 10:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años, 6 meses
Puntos: 0
ayuda para separar datos de un buffer

Buenas, tengo un problema. Expongo lo que quiero conseguir: dentro de un programa un usuario me debe entrar por teclado:

mensaje 12.3.32.32 hola como estas.

y quiero almacenar cada parte en una variables, es decir
variable1: mensaje
variable2: 12.3.32.32
variable3: hola como estas

Lo he estado haciendo con: fgets(buffer,2048,stdin);
buffer declarado como char buffer[2048];
y me lo almacena todo en la variable buffer, pero despues no se cómo partir esta variable, ya que al hacer buffer[0] me da violación de segmento..

muchas gracias de antemano
  #2 (permalink)  
Antiguo 04/06/2005, 10:55
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Bueno, tomando como base el ejemplo que pusiste yo haria esto:

char variable1[32];
char variable2[32];
char variable3[128];

fscanf(archivo, "%s", &variable1);//Lee hasta encontrar el primer espacio y lo //guarda en la variable 1
fscanf(archivo, "%s", &variable2);//Lo mismo que arriba solo que lee la segunda //parte
//Po ultimo, leemos todo lo demas.

fgets(&variable3, 127, archivo);//Claro que le maximo numero de caracteres es //127, pero te lo almacena todo en la variable.

Y asi tendria la informacion separada.

Esta forma esta muy limitada al tipo d mensajes que pones en el ejemplo, para cosas mas complicadas necesitas leer en el buffer todo e ir separando segun tu juicio.

Para esot necesitas hacer ciclos que chequen cada uno de los elementos del buffer y compararlos con alguna tabla o valor para saber en que momento empezamos a separa el mensaje.

Saludos
  #3 (permalink)  
Antiguo 04/06/2005, 11:06
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años, 6 meses
Puntos: 0
gracias por la rápida respuesta, pero se me plantea un problema:

yo en el código tengo esto:

fgets(buffer,BUFFSIZE,stdin);
//si no em ponen MESG envio todo el buffer
if (strncmp(buffer,"MESG ",5)!=0)
{
write(sock,buffer,strlen(buffer));
}

//si me ponen mesg, es cuando debo separar lo del buffer en tres variables
else
{
//...
}


es decir, no siempre quiero partir lo que me entra el usuario, solo en el caso en que las primeras cuatro cifras sean igual a MESG.

bueno gracias de nuevo ;)
  #4 (permalink)  
Antiguo 04/06/2005, 11:10
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Una vez que ya tenes el buffer en una variable podes usar strchr() para buscar el caracter espacio (' ' o 32).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 04/06/2005, 12:40
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años, 6 meses
Puntos: 0
strchr solo encuentra la primera ocurrencia del caracter no?, asi solo podria copiar con strncpy los primeros caracteres a la primera variable. Pero como podría hacer para llenar las otras dos variables?. Lo malo es que en la tercera variable tambien puede haber espacios en medio.

Gracias por vuestra ayuda ;)
  #6 (permalink)  
Antiguo 04/06/2005, 13:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Despues podes usar como primer parametro de strchr() el valor que te devuelve mas uno, asi encontras la primera ocurrencia pero apartir de otro punto determinado. Con la segunda ocurrencia sabes donde termina la segunda variable y sumandole uno mas obtenes el principio de la tercera variable.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 04/06/2005, 14:04
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años, 6 meses
Puntos: 0
oki, mañana lo probaré y cuento que tal va. Muchas gracias!!!
  #8 (permalink)  
Antiguo 05/06/2005, 05:36
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años, 6 meses
Puntos: 0
ya lo tengo todo arreglado, al final con strchr i strtok me ha salido, merci a los que me habéis ayudado!

salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:19.