Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: erest0r en 27 Febrero 2014, 22:38 pm



Título: Modificar un archivo de texto
Publicado por: erest0r en 27 Febrero 2014, 22:38 pm
Hola, este es mi codigo

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main( int argc, char* args[] )
  5. {
  6.    FILE *ptr;
  7.    fpos_t pos;
  8.    char palabra_usuario[50] = {};
  9.    char palabra_archivo[50] = {};
  10.    char ch;
  11.    int n = 0;
  12.    bool encontrado = false;
  13.  
  14.    ptr = fopen("prueba.txt", "r+");
  15.  
  16.    if( ptr )
  17.    {
  18.        printf("Escriba lo que desea modificar: ");
  19.        fgets(palabra_usuario, 50, stdin);
  20.  
  21.        while( !feof(ptr) || !encontrado )
  22.        {
  23.            fgetpos( ptr, &pos );
  24.  
  25.            do
  26.            {
  27.                ch = fgetc(ptr);
  28.                palabra_archivo[n++] = ch;
  29.            }while( ch != '\n' );
  30.  
  31.            palabra_archivo[n] = '\0';
  32.            n = 0;
  33.  
  34.            if( strcmp(palabra_usuario, palabra_archivo) == 0 )
  35.            {
  36.                printf("Su palabra: %s Palabra encontrada: %s\n\n", palabra_usuario, palabra_archivo);
  37.                printf("Escriba por lo que lo quiera cambiar: ");
  38.                fgets(palabra_usuario, 50, stdin);
  39.                fsetpos(ptr,&pos);
  40.                fprintf(ptr, "%s", palabra_usuario);
  41.                encontrado = true;
  42.            }
  43.        }
  44.  
  45.        if( !encontrado )
  46.            printf("No se encontro esa palabra");
  47.    }
  48.  
  49.    fclose(ptr);
  50.  
  51.    return 0;
  52. }
  53.  
  54.  

El programa encuentra efectivamente la palabra del archivo de texto (Nota: el archivo de texto ya existe), pero cuando intento agregar la nueva palabra para modificarla el programa muestra un error.

Gracias por la ayuda de antemano.


Título: Re: Modificar un archivo de texto
Publicado por: erest0r en 27 Febrero 2014, 23:21 pm
/


Título: Re: Modificar un archivo de texto
Publicado por: ivancea96 en 27 Febrero 2014, 23:38 pm
No das datos de cómo está estructurado el archivo, ni sobre el error. Tampoco dices si has detectado en donde está el error.

Si el archivo es pequeño, lo que hago yo es leerlo entero, y reescribirlo con la palabra cambiada.


Título: Re: Modificar un archivo de texto
Publicado por: erest0r en 27 Febrero 2014, 23:45 pm
ejemplo del archivo:

pedro
jose
luis

Cuando trato de buscar alguno de las palabras menos la ultima, el programa las encuentra, pero cuando ingreso la nueva palabra para cambiarla el programa se sale, y cuando introduzco la ultima palabra o la palabra no existe tambien se sale.



Título: Re: Modificar un archivo de texto
Publicado por: erest0r en 28 Febrero 2014, 17:29 pm
Bueno logre que al menos cumpla su cometido.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main( int argc, char* args[] )
  5. {
  6.    FILE *ptr;
  7.    fpos_t pos;
  8.    char palabra_usuario[50] = {};
  9.    char palabra_a_buscar[50] = {};
  10.    char archivo_restante[256] = {};    // Almacena la cadena de caracteres restante en caso haya encontrado la palabra deseada
  11.    char ch;
  12.    int n;
  13.    bool encontrado = false;
  14.  
  15.    ptr = fopen("prueba.txt", "r+");
  16.  
  17.    if( ptr )
  18.    {
  19.        printf("Escriba lo que desea modificar: ");
  20.        fgets(palabra_usuario, 50, stdin);
  21.  
  22.        while( !feof(ptr) && !encontrado )
  23.        {
  24.            n = 0;
  25.            fgetpos( ptr, &pos );
  26.  
  27.            do
  28.            {
  29.                ch = fgetc(ptr);
  30.                palabra_a_buscar[n++] = ch;
  31.  
  32.            } while( ch != '\n' && ch != EOF );
  33.  
  34.            if( palabra_a_buscar[n-1] == EOF )
  35.                palabra_a_buscar[n-1] = '\n';
  36.  
  37.            if( strcmp(palabra_usuario, palabra_a_buscar) == 0 )
  38.            {
  39.                n = 0;
  40.                do
  41.                {
  42.                    ch = fgetc(ptr);
  43.                    archivo_restante[n++] = ch;
  44.                } while( !feof(ptr) && ch != EOF );
  45.                archivo_restante[n-1] = '\0';
  46.  
  47.                printf("Su palabra: %s \nPalabra encontrada: %s\n\n", palabra_usuario, palabra_a_buscar);
  48.                printf("Escriba por lo que lo quiera cambiar: ");
  49.                fgets(palabra_usuario, 50, stdin);
  50.                fsetpos(ptr,&pos);
  51.                fprintf(ptr, "%s%s", palabra_usuario, archivo_restante);
  52.                encontrado = true;
  53.            }
  54.            memset(palabra_a_buscar, '\0', 50);
  55.        }
  56.  
  57.        if( !encontrado )
  58.            printf("No se encontro esa palabra");
  59.    }
  60.  
  61.    fclose(ptr);
  62.  
  63.    return 0;
  64. }
  65.  

Quizas exista una manera mas eficiente, pero al menos pude hacer que funcionara