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

Comparar cadena passada con la de cadena de un fichero

Estas en el tema de Comparar cadena passada con la de cadena de un fichero en el foro de C/C++ en Foros del Web. Buenas noches, Tengo un Struct con 3 campos int , char , int . Introduzco un registro con esos 3 tipos dentro de un fichero ...
  #1 (permalink)  
Antiguo 19/05/2012, 13:35
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Comparar cadena passada con la de cadena de un fichero

Buenas noches,

Tengo un Struct con 3 campos int , char , int .

Introduzco un registro con esos 3 tipos dentro de un fichero de texto (.txt)

y cuando voy a buscarlo para ver si son iguales lo hago así

Código C:
Ver original
  1. if(strcmp(dades[x].mes,var_mes)==0){
  2.                     printf("\n %d",dades[x].any);
  3.                     printf(...
  4.                 }

Claro esto siempre me dará correcto siempre que sean iguales.

Pero aquí si no me equivoco estoy comparando con el propio struct y no del fichero, por mucho que la información la guarde con un "fprintf".

Es decir si ahora hago en un .c solo esa función sin estruct no funcionaria.

Mi pregunta es como comparo lo que le paso "var_mes" con la línea del fichero ?

Gracias

Última edición por drakgoku1; 19/05/2012 a las 13:56
  #2 (permalink)  
Antiguo 19/05/2012, 18:31
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Comparar cadena passada con la de cadena de un fichero

Hola! no entendi bien q es lo que queres hacer, pero te respondo igual... No podes comparar var_mes directamente con una linea del fichero, primero tenes que recuperar esa linea en una variable(ya sea con fgets,fscanf,etc) y recien hacer la comparacion entre cadenas. Ademas tendrias q hacer un algoritmo para posicionarte en la linea del fichero
Esto es lo q entendi, sino te sirvio desarrolla un poco mas tu duda

Saludos
  #3 (permalink)  
Antiguo 20/05/2012, 07:49
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Comparar cadena passada con la de cadena de un fichero

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! no entendi bien q es lo que queres hacer, pero te respondo igual... No podes comparar var_mes directamente con una linea del fichero, primero tenes que recuperar esa linea en una variable(ya sea con fgets,fscanf,etc) y recien hacer la comparacion entre cadenas. Ademas tendrias q hacer un algoritmo para posicionarte en la linea del fichero
Esto es lo q entendi, sino te sirvio desarrolla un poco mas tu duda

Saludos
Ahora mismo tengo :

Código C:
Ver original
  1. agenda = fopen("paraules.txt","r");
  2.         if(agenda==NULL){
  3.             printf("\n\t El fitxer no existeix ");
  4.         }
  5.         else{
  6.             //printf("\n\t Quin dia busques ? "); scanf("%d",&var_dia);
  7.             printf("\n\t Quin mes busques ? "); scanf("%s",&var_mes);
  8.             //printf("\n\t Quin any busques ? "); scanf("%d",&var_any);
  9.             do{
  10.                 //fgets(agenda,c);
  11.                 fscanf(agenda,"%s",&c);
  12.                 if(strcmp(c,var_mes)==0 /*&& strcmp(c,var_dia)==0 && strcmp(c,var_any)==0 */){
  13.                     printf("%s ",c);
  14.                 }
  15.             }while(!feof(agenda));
  16.  
  17.         }fclose(agenda);

Claro si pongo por ejemplo " abril" y tuviera 4 me mostraría 4.

pero como cojo los números ?

Ejemplo introduzco día : 20 mes : abril año : 2040

Solo mostraría abril tantos como tenga el fichero y dentro del while (if) no puedo comparar %d ya que tengo strings + numbers.

Jo quiero que me muestre 1 hacia atrás para el dia y 1 hacia adelante para el mes. Sinceramente no se como hacerlo por eso hago chapuzas

Alguna solución ?

Gracias
  #4 (permalink)  
Antiguo 20/05/2012, 09:55
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Comparar cadena passada con la de cadena de un fichero

Hola! tu archivo tiene este formato:
5 abril 2010
6 junio 2012
20 mayo 2012
.......

Si es asi lo que podes hacer es recuperar esos tres datos a la ves:
Código C:
Ver original
  1. fscanf(agenda,"%d %s %d",&dia,mes,&anio);

Luego en el if:
Código C:
Ver original
  1. if(dia==var_dia && strcmp(mes,var_mes)==0 && anio==var_any)
  2.    printf("Este dia se encuentra en el archivo\n");

Otra cosa cuando ingresas una cadena a traves de scanf no es necesario poner el & delante del arreglo, solo basta con el nombre: scanf("%s",var_mes); // el & esta demas
Si pones el & creo q solo guardarias el primer caracter de la cadena, igual no estoy seguro

Saludos
  #5 (permalink)  
Antiguo 20/05/2012, 10:49
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Comparar cadena passada con la de cadena de un fichero

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! tu archivo tiene este formato:
5 abril 2010
6 junio 2012
20 mayo 2012
.......

Si es asi lo que podes hacer es recuperar esos tres datos a la ves:
Código C:
Ver original
  1. fscanf(agenda,"%d %s %d",&dia,mes,&anio);

Luego en el if:
Código C:
Ver original
  1. if(dia==var_dia && strcmp(mes,var_mes)==0 && anio==var_any)
  2.    printf("Este dia se encuentra en el archivo\n");

Otra cosa cuando ingresas una cadena a traves de scanf no es necesario poner el & delante del arreglo, solo basta con el nombre: scanf("%s",var_mes); // el & esta demas
Si pones el & creo q solo guardarias el primer caracter de la cadena, igual no estoy seguro

Saludos
Gracias lo tenía en ese formato y funciona de perlas.

No pare a pensar con el fscanf con 3 valores.

Muchas gracias.

Etiquetas: fichero, funcion, int, struct, 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 01:03.