es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo reemplazar un carácter en un archivo de texto usando C?

Necesito leer un archivo de texto (E3-5.txt) y buscar el carácter c1 para reemplazarlo por c2. Este es mi código incompleto:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char c;
    char c1 = 'm';
    char c2 = 'a';
    int i;
    FILE* fp;
    fp = fopen("C:\E3-5.txt", "r+");
    if (fp == NULL)
    {
        printf("¡Archivo no encontrado!");
        return 0;
    }

    for(c = getc(fp); c != EOF; c = getc(fp))
    {
        if(c == 'm')
        {
            i = ftell(fp);
            printf("\nPosición %d", i);
        }
    }

    return 0;
}

Tengo problemas para localizar la posición de c1 en el texto y cómo reescribirlo.

Edición:
Usé el código de respuesta, pero no cambió el texto. Este es el nuevo código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char c;
    char c1 = 'm';
    char c2 = 'a';
    int i;
    FILE* fp;
    fp = fopen("C:\E3-5.txt", "rb+");
    if (fp == NULL)
    {
        printf("¡Archivo no encontrado!");
        return 0;
    }
    else
    {
        for(c = getc(fp); c != EOF; c = fgetc(fp))
        {
            if(c == c1)
            {
                fseek(fp, -1, SEEK_CUR);
                fputc(c2, fp);
            }
            else
            {
                return 0;
            }
        }
    }

    return 0;
}

El programa devolvió 0 sin escribir nada en el texto.</string.h></stdlib.h></stdio.h></string.h></stdlib.h></stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes usar las funciones fseek y fputc para reemplazar el carácter c1 por c2. Aquí está el código actualizado:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char c;
        char c1 = 'm';
        char c2 = 'a';
        int i;
        FILE* fp;
        fp = fopen("C:\\E3-5.txt", "rb+");
        if (fp == NULL)
        {
            printf("¡Archivo no encontrado!");
            return 0;
        }
        else
        {
            for(c = fgetc(fp); c != EOF; c = fgetc(fp))
            {
                if(c == c1)
                {
                    fseek(fp, -1, SEEK_CUR);
                    fputc(c2, fp);
                }
            }
        }
        fclose(fp);
        return 0;
    }
    

    Este código abre el archivo en modo “rb+” que permite leer y escribir en el archivo. Luego, itera a través de cada carácter en el archivo usando fgetc. Si el carácter es el que quieres reemplazar (c1), usa fseek para mover el apuntador del archivo hacia atrás un carácter y luego usa fputc para escribir el nuevo carácter en el archivo. Finalmente, el archivo se cierra usando fclose.</string.h></stdlib.h></stdio.h>

Comments are closed.