Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Concatenar valor cadena en una variable

Estas en el tema de Concatenar valor cadena en una variable en el foro de C/C++ en Foros del Web. Estimados tengo un problemita. Tengo un programita en C que recibe una cadena con valores numericos, caracteres y simbolos. de los cuales esta compuesto por ...
  #1 (permalink)  
Antiguo 19/11/2010, 12:16
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 4 meses
Puntos: 0
Concatenar valor cadena en una variable

Estimados tengo un problemita.

Tengo un programita en C que recibe una cadena con valores numericos, caracteres y simbolos.
de los cuales esta compuesto por datos importantes como fecha, hora etc... y necesito poder extraerlos de su posicion de la cadena para que sea guardado en una variable. por ejemplo:

Recibo esta cadena
>RCC120510AAAAADDDDFFFFGGGG<

lo que quiero es sacar un valor de la cadena ubicada en la posicion 6 y 7 (valor 12 )que corresponde al dia por ejemplo.
posicion 8 y 9 que es el mes (valor 05)
posicion 10 7 11 (valor 10 ) es el año
posicion 11, 12, 13, 14, 15 que es nombre de una persona

Entonce lo que quiero es crear una variable que se llame "dia" y que me guarde el valor 12, crear una vaiable "mes" que guarde el 05, etc...

mi forma de pensar es que se pueda concatener el dato.

int dia;
char cadena[100];

strcpy(dia, cadena[8]);
printf("2 \n");
strcat(dia, cadena[9]);
printf("%s \n", dia);
suponiendo que el valor "dia" me guarde el valor 12

hechenme una mano si esta forma es correcta o es mas facil recorrer el arreglo con un for, pero mi duda es que nose como crear un dato pero que los saque de 2 posiciones de la cadena.

Saludos
  #2 (permalink)  
Antiguo 19/11/2010, 12:46
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Concatenar valor cadena en una variable

checate esto seguro que te sera de ayuda
http://www.forosdelweb.com/f96/substr-para-c-543410/
  #3 (permalink)  
Antiguo 19/11/2010, 15:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Concatenar valor cadena en una variable

otra opcion que decia era esta:

char cadena[] = ">RCC010510" // 01 es dia / 05 es mes / 10 es año

int dia = cadena[5]; // aki nose como poner los 2 datos del dia ya que aqui //guardo solo el el puso cero pero no el valor uno
int mes = cadena[7];

.... y asi sucesivamente

pero no hayo como hacerlo
  #4 (permalink)  
Antiguo 19/11/2010, 15:22
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Concatenar valor cadena en una variable

ya revistaste lo que te pase?
  #5 (permalink)  
Antiguo 19/11/2010, 18:18
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Concatenar valor cadena en una variable

Si siempre van a estar en el mismo lugar yo haria lo siguiente.

char cadena[] = ">RCC010510"

int dia = ( (cadena[4] - '0') * 10 ) + (cadena[5] - '0') ;

int mes = ( (cadena[6] - '0') * 10 ) + (cadena[7] - '0');

int mes = ( (cadena[8] - '0') * 10 ) + (cadena[9] - '0');

en cadena[8] se almacena el codigo ascii del caracter. Como los numeros estan de forma consecutivas en el codigo ascii si le restamos el codigo ascii del cero ('0') obtenemos el codigo deseado. Entonces por cada numero obtengo sus dos digitos y multiplico por dies al primero.

Y listo tenemos el numero.

Lo que si, solo sirve si estan bien posicionados.
  #6 (permalink)  
Antiguo 19/11/2010, 18:55
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Concatenar valor cadena en una variable

Aun mas facil, usando un sscanf :E

Código c:
Ver original
  1. char *cadena = ">RCC120510AAAAADDDDFFFFGGGG<";
  2. int dia, mes, anio;
  3.  
  4. sscanf(cadena, "%*4s%2i%2i%2i%*s", &dia, &mes, &anio);

Algo asi debe ser, no estoy en inux en este momento asi que no lo puedo comprobar pero te explico rapidamente.

sscanf se utiliza para leer informacion de una cadena (asi como scanf lo hace de la entrada estandar y fscanf de un archivo) en un formato especificado, en este caso le estamos diciendo que lea una cadena de cuatro caracteres y que la descarte (gracias al asterisco), luego leas un entero de dos digitos y lo almacene en dia, asi mismo con mes y anio, y por ultimo que lea una todo lo que queda de la cadena y que lo descarte (al descartar no quiero decir borrar, simplemente no lo toma en cuenta para la asignacion).

Como veras los scanf's son mucho mas utiles de lo que uno podria llegar a pensar (ademas nos hacen el parseo directamente de una cadena a enteros o a cualquie tipo de dato).

Espero haberte ayudado

Saludos++
  #7 (permalink)  
Antiguo 20/11/2010, 07:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: Concatenar valor cadena en una variable

Buenas,

tengo una pregunta: ¿siempre los datos vienen en ese orden y las cadenas siempre tienen el formato correcto? Me explico, ¿tienes algún campo tipo CRC (control de errores) que te indique si la trama de datos es correcta o es que siempre lo es y no es necesario comprobarlo?. Si no es necesario comprobarlo, puedes usar la solución de sam90: recorres la tabla, seleccionas el primer numero, lo multiplicas por 10, le sumas las unidades y lo guardas.

Sin embargo, si los campos tienen algún formato específico (por ejemplo, los campos numéricos siempre tienen 2 caracteres), tendrás que realizar las operaciones (las que te ha comentado sam90) al mismo tiempo que vas verificando que el campo no contiene errores. Para ello, podrías emplear un dominio para cada dato (por ejemplo, los meses pertenecen al dominio [0,12] ). Una buena idea podría ser la de emplear una función para cada dato que se va a leer, ya que a la hora de depurar o corregir errores podrías descubrir el error más cómodamente.

Por último, y como consejo, piensa que quizás el emplear una estructura (mejor dinámica) también te simplificaría mucho el almacenamiento de los datos obtenidos y su posterior empleo.

Un saludo,
Gonzo13
  #8 (permalink)  
Antiguo 20/11/2010, 19:35
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Concatenar valor cadena en una variable

Agradezco mucho sus comentarios ya que son de gran ayuda para resolver mi problema.

Tengo un duda en base a las dos opciones, nose cual de las 2 usa menos memoria o recursos de maquina.

en base a la pregunta de gonzo13 mira, en realidad la cadena que recibo es harto mas grande que la que detalle en la pregunta, pero puse eso ya que quería saber la metodología de como hacerlo, creo que me quedare con el método de trovaz ya que mi cadena contiene letras, números y símbolos, entonces no se como hacerlo con el método de sam90 ya que al momento de tener letras no puedo realizar una multiplicación.

con respecto a la cadena esta sera enviada por un puerto, entonces al momento de recibirla verifico su integridad y de ser correcta la integridad la almaceno en un archivo txt. luego de esto la saco del archivo txt, la leo y la proceso con el método que UD me enseñaron.
  #9 (permalink)  
Antiguo 21/11/2010, 09:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: Concatenar valor cadena en una variable

Hola,

es cierto que no puedes realizar una multiplicación con los caracteres, pero ni sam90 ni ninguno de nosotr@s te hemos dicho que la hagas. Los datos alfanuméricos puedes guardarlos en una tabla y luego imprimirlos como si de una cadena se tratase.

Es mucho más económico usar una estructura e ir rellenando los campos poco a poco. Más tarde, al manipularla, no tendrás que estar pasando punteros de un lado a otro. Simplemente, pasas un puntero a la estructura y trabajas con lo que tengas que trabajar.

Un saludo,
Gonzo13

Etiquetas: concatenar, variables, cadenas
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 11:21.