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

Buscar palabras en un fichero.

Estas en el tema de Buscar palabras en un fichero. en el foro de C/C++ en Foros del Web. Buenas chicos, tengo el siguiente problema. Tengo un fichero, necesito buscar una palabra y buscar el numero de linea en el que esta. Tengo lo ...
  #1 (permalink)  
Antiguo 05/06/2012, 16:25
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Buscar palabras en un fichero.

Buenas chicos, tengo el siguiente problema. Tengo un fichero, necesito buscar una palabra y buscar el numero de linea en el que esta.

Tengo lo siguiente
Código C:
Ver original
  1. FAVORITES = fopen("platform/config/ServerBrowser.vdf", "rt");
  2.         if (FAVORITES != NULL) {
  3.             fseek(FAVORITES, 0, SEEK_END);
  4.             CARACTER = ftell(FAVORITES);
  5.             char PARSE[CARACTER];
  6.            
  7.             fseek(FAVORITES, 0, SEEK_SET);
  8.             PARSE[0] = getc(FAVORITES);
  9.             while (feof(FAVORITES) == 0) {
  10.                 PARSE[i++] = getc(FAVORITES); }
  11.                
  12.             char *P_PARSE;
  13.             P_PARSE = PARSE;
  14.             int j, k = 0;
  15.            
  16.             for (j = 0 ; j < strlen(PARSE) ; j++) {
  17.             if (*P_PARSE == 'a' && P_PARSE++ && *P_PARSE == 'd' && P_PARSE++ && *P_PARSE == 'd' && P_PARSE++
  18.                && *P_PARSE == 'r' && P_PARSE++ && *P_PARSE == 'e' && P_PARSE++ && *P_PARSE == 's' && P_PARSE++
  19.                && *P_PARSE == 's') {
  20.                     k++;}

Lo cual buscará la palabra address, pero de esta forma me resulta muy lento, a mi parecer ¿será que se los ocurre otra forma mas elegante de hacer esta busquedad?


Saludos.
  #2 (permalink)  
Antiguo 06/06/2012, 17:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Buscar palabras en un fichero.

Hola! se me ocurrio esto, usando algunas funciones de string.h:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX 50
  5.  
  6. int main() {
  7.    
  8.     char line[MAX];
  9.     char *p;
  10.     FILE *fp=fopen("cesar.txt","rt");
  11.     int i=0;
  12.     char aux[MAX];
  13.    
  14.     fgets(line,MAX,fp);
  15.     while(!feof(fp)) {
  16.                    i++;
  17.                    if(p=strstr(line,"addres")) { /* tomo como subpalabra "addres"
  18.                    si se encuentra, sscanf guarda en aux la palabra que contiene a la subpalabra "addres"*/
  19.                      sscanf(p,"%s",aux);
  20.                      }
  21.                      if(!strcmp(aux,"addres")) /* comparo las palabras, y en caso de ser iguales sale del while */
  22.                          break;
  23.                    fgets(line,MAX,fp);
  24.     }
  25.    
  26.     printf("\nline: %d\n",i);
  27.    
  28.     return 0;
  29. }
No lo comprobe del todo pero deberia andar bien. Saludos
  #3 (permalink)  
Antiguo 06/06/2012, 23:23
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Buscar palabras en un fichero.

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! se me ocurrio esto, usando algunas funciones de string.h:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX 50
  5.  
  6. int main() {
  7.    
  8.     char line[MAX];
  9.     char *p;
  10.     FILE *fp=fopen("cesar.txt","rt");
  11.     int i=0;
  12.     char aux[MAX];
  13.    
  14.     fgets(line,MAX,fp);
  15.     while(!feof(fp)) {
  16.                    i++;
  17.                    if(p=strstr(line,"addres")) { /* tomo como subpalabra "addres"
  18.                    si se encuentra, sscanf guarda en aux la palabra que contiene a la subpalabra "addres"*/
  19.                      sscanf(p,"%s",aux);
  20.                      }
  21.                      if(!strcmp(aux,"addres")) /* comparo las palabras, y en caso de ser iguales sale del while */
  22.                          break;
  23.                    fgets(line,MAX,fp);
  24.     }
  25.    
  26.     printf("\nline: %d\n",i);
  27.    
  28.     return 0;
  29. }
No lo comprobe del todo pero deberia andar bien. Saludos
Excelente me diste una idea de como hacerlo, muchísimas gracias :)

Saludos.
  #4 (permalink)  
Antiguo 09/06/2012, 22:09
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Buscar palabras en un fichero.

Estaba extremadamente aburrido en mi casa asi que hice este programa un poco producido xD. Espero les guste

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.     FILE *archivo;
  8.  
  9.     int opc;
  10.     int contador = 0, encontrado = 0;
  11.     char cadena[256], buscar[100], nombre[25];
  12.     char *a;
  13.    
  14.     printf("\n ******************************************************************************\n\n");
  15.     printf(" **********  BIENVENIDO AL PROGRAMA DE BUSQUEDA DE PALABRAS/FRASES  ***********\n");
  16.     printf("\n ******************************************************************************\n");
  17.     printf("\n\n     Ingrese el nombre o ubicacion del archivo, incluyendo punto y formato:\n\n\t\t\t\t");
  18.     fflush(stdin);
  19.     scanf("%[^\n]", nombre);
  20.    
  21.     archivo = fopen(nombre,"r");
  22.    
  23.     if (archivo != NULL)
  24.     {      
  25.         while (opc == 2)
  26.         {
  27.             printf("\n     Ingrese la palabra/frase que desea buscar en el archivo %s:\n\n\t\t\t\t", nombre);
  28.             fflush(stdin);
  29.             scanf("%[^\n]", buscar);
  30.            
  31.             rewind(archivo);
  32.  
  33.             contador = 0;
  34.            
  35.             encontrado = 0;
  36.  
  37.             while (!feof(archivo))
  38.             {
  39.                 contador++;
  40.                
  41.                 fgets(cadena,256,archivo);
  42.                
  43.                 a = strtok(cadena,",.- ");
  44.                
  45.                 while (a != NULL)
  46.                 {
  47.                     if (!strcmp(buscar, a))
  48.                     {
  49.                         encontrado++;
  50.                        
  51.                         if (encontrado == 1)
  52.                         printf("\n     COINCIDENCIAS\n");
  53.                         printf("\n     %d. Seencontro la palabra/frase: %s.\n     Linea en que se encontro: %d.\n", encontrado, a, contador);
  54.                     }
  55.                     a = strtok (NULL, " ");
  56.                 }
  57.             }  
  58.             if (encontrado <= 0)
  59.             printf("\n     La palabra o frase no se encontro en el archivo %s.\n", nombre);
  60.            
  61.             printf("\n                               MENU DEL PROGRAMA\n");
  62.            
  63.             printf("\n     1. Elegir otra palabra a buscar.\n     2. Salir del programa.\n");
  64.            
  65.             printf("\n     Que desea seguir haciendo: ");
  66.             fflush(stdin);
  67.             scanf("%d", &opc);
  68.            
  69.             while (opc > 2 || opc < 0)
  70.             {
  71.                 printf("     Esa no es una opcion valida, por favor ingrese una opcion: ");
  72.                 fflush(stdin);
  73.                 scanf("%d", &opc);
  74.             }
  75.             if (opc == 2)
  76.             printf("\n                              PROGRAMA FINALIZADO\n\n");
  77.         }
  78.     }
  79.     else
  80.     {
  81.         printf("\n                  Hubo un error en la apertura del archivo...\n\n");
  82.         fclose(archivo);
  83.         return EXIT_FAILURE;
  84.     }
  85.     fclose(archivo);
  86.     return EXIT_SUCCESS;
  87. }

Última edición por ElPatoGarrido; 09/06/2012 a las 23:03
  #5 (permalink)  
Antiguo 10/06/2012, 22:58
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Buscar palabras en un fichero.

Hola! tenes algunos errores:
1º A la variable opc, al principio no la inicializas por lo que en la condicion del while siempre va a ser falso
2º Ademas de darle un valor a opc, la condicion esta mal formulada para lo que queres hacer. Tiene que ser:
Código C:
Ver original
  1. while(opc!=2) {
  2. // codigo
  3. }
si vos pones opc==2 solo va a salir cuando ingreses algo distinto de 2
3º Supongamos que el archivo no se pudo abrir, entonces no va a entrar al primer if sino que va a ir al else y se va a imprimir el mensaje de error. El problema esta en que vos en ese else pones fclose(archivo); intentas cerrar algo q no se pudo abrir, por lo tanto el compilador te va a tirar un error, lo cual no es muy lindo :P.. Sacalo d ahi

Saludos
  #6 (permalink)  
Antiguo 12/06/2012, 21:16
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Buscar palabras en un fichero.

tomando en cuenta el coment de arriba aqui dejo el codigo recorregido.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.     FILE *archivo;
  8.  
  9.     int opc = 1;
  10.     int contador = 0, encontrado = 0;
  11.     char cadena[256], buscar[100], nombre[25];
  12.     char *a;
  13.    
  14.     printf("\n ******************************************************************************\n\n");
  15.     printf(" **********  BIENVENIDO AL PROGRAMA DE BUSQUEDA DE PALABRAS/FRASES  ***********\n");
  16.     printf("\n ******************************************************************************\n");
  17.     printf("\n\n     Ingrese el nombre o ubicacion del archivo, incluyendo punto y formato:\n\n\t\t\t\t");
  18.     fflush(stdin);
  19.     scanf("%[^\n]", nombre);
  20.    
  21.     archivo = fopen(nombre,"r");
  22.    
  23.     if (archivo != NULL)
  24.     {      
  25.         while (opc == 1)
  26.         {
  27.             printf("\n     Ingrese la palabra/frase que desea buscar en el archivo %s:\n\n\t\t\t\t", nombre);
  28.             fflush(stdin);
  29.             scanf("%[^\n]", buscar);
  30.            
  31.             rewind(archivo);
  32.  
  33.             contador = 0;
  34.            
  35.             encontrado = 0;
  36.  
  37.             while (!feof(archivo))
  38.             {
  39.                 contador++;
  40.                
  41.                 fgets(cadena,256,archivo);
  42.                
  43.                 a = strtok(cadena,",.- ");
  44.                
  45.                 while (a != NULL)
  46.                 {
  47.                     if (!strcmp(buscar, a))
  48.                     {
  49.                         encontrado++;
  50.                        
  51.                         if (encontrado == 1)
  52.                         printf("\n     COINCIDENCIAS\n");
  53.                         printf("\n     %d. Se encontro la palabra/frase: %s\n     Linea en que se encontro: %d.\n", encontrado, a, contador);
  54.                     }
  55.                     a = strtok (NULL, " ");
  56.                 }
  57.             }  
  58.             if (encontrado <= 0)
  59.             printf("\n     La palabra o frase no se encontro en el archivo %s.\n", nombre);
  60.            
  61.             printf("\n                               MENU DEL PROGRAMA\n");
  62.            
  63.             printf("\n     1. Elegir otra palabra a buscar.\n     2. Salir del programa.\n");
  64.            
  65.             printf("\n     Que desea seguir haciendo: ");
  66.             fflush(stdin);
  67.             scanf("%d", &opc);
  68.            
  69.             while (opc > 2 || opc < 0)
  70.             {
  71.                 printf("     Esa no es una opcion valida, por favor ingrese una opcion: ");
  72.                 fflush(stdin);
  73.                 scanf("%d", &opc);
  74.             }
  75.             if (opc == 2)
  76.             printf("\n                              PROGRAMA FINALIZADO\n\n");
  77.         }
  78.     }
  79.     else
  80.     {
  81.         printf("\n                  Hubo un error en la apertura del archivo...\n\n");
  82.         fclose(archivo);
  83.         return EXIT_FAILURE;
  84.     }
  85.     return EXIT_SUCCESS;
  86. }

Etiquetas: int, palabras
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:31.