Programa en C para buscar y reemplazar una palabra en un archivo por otra palabra dada

Requisito previo: manejo de archivos en C
Dado un archivo que contiene algo de texto y dos strings wordToBeFind y wordToBeReplacedWith , la tarea es encontrar todas las apariciones de la palabra dada ‘wordToBeFind’ en el archivo y reemplazarlas con la palabra dada ‘wordToBeReplacedWith’. 

Ejemplos: 

Input : File = "xxforxx xx for xx", 
        wordToBeFind = "xx", 
        wordToBeReplacedWith = "geeks"
Output : geeksforgeeks geeks for geeks

Enfoque: la idea aquí es leer el contenido del archivo dado, procesar la búsqueda y el reemplazo, y luego almacenar la salida en otro archivo.

  1. Hacer objetos de ARCHIVO (ifp y ofp)
  2. Abra dos archivos, uno para la entrada de archivos en modo lectura y otro en modo escritura+
  3. Verifica que el archivo se abra correctamente
  4. Lea el contenido del archivo de entrada existente palabra por palabra
  5. Como el uso de fgets toma la entrada del carácter de nueva línea (es decir, la tecla Intro), también copiamos el carácter nulo de la string una posición hacia atrás para que la nueva línea se reemplace con «\ 0»
  6. Ejecutamos un ciclo hasta que se alcanza el final del archivo y escaneamos cada palabra en el archivo y lo almacenamos en una variable «leer».
  7. Luego comparamos «leer» con «wordToBeFind» y si el resultado es verdadero, usamos «strcpy()» para reemplazar «leer» con «wordToBeReplacedWith».
  8. Mostrar el reemplazo de palabras a través de printf
  9. Ahora, nuevamente cambiamos el puntero de archivo al comienzo del archivo e imprimimos el contenido del archivo de salida.

A continuación se muestra la implementación del enfoque anterior: 

C

// C program to find and replace a word
// in a File by another given word
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Function to find and
// replace a word in File
void findAndReplaceInFile()
{
    FILE *ifp, *ofp;
    char word[100], ch, read[100], replace[100];
    int word_len, i, p = 0;
 
    ifp = fopen("file_search_input.txt", "r");
    ofp = fopen("file_replace_output.txt", "w+");
    if (ifp == NULL || ofp == NULL) {
        printf("Can't open file.");
        exit(0);
    }
    puts("THE CONTENTS OF THE FILE ARE SHOWN BELOW :\n");
 
    // displaying file contents
    while (1) {
        ch = fgetc(ifp);
        if (ch == EOF) {
            break;
        }
        printf("%c", ch);
    }
 
    puts("\n\nEnter the word to find:");
    fgets(word, 100, stdin);
 
    // removes the newline character from the string
    word[strlen(word) - 1] = word[strlen(word)];
 
    puts("Enter the word to replace it with :");
    fgets(replace, 100, stdin);
 
    // removes the newline character from the string
    replace[strlen(replace) - 1] = replace[strlen(replace)];
 
    fprintf(ofp, "%s - %s\n", word, replace);
 
    // comparing word with file
    rewind(ifp);
    while (!feof(ifp)) {
 
        fscanf(ifp, "%s", read);
 
        if (strcmp(read, word) == 0) {
 
            // for deleting the word
            strcpy(read, replace);
        }
 
        // In last loop it runs twice
        fprintf(ofp, "%s ", read);
    }
 
    // Printing the content of the Output file
    rewind(ofp);
    while (1) {
        ch = fgetc(ofp);
        if (ch == EOF) {
            break;
        }
        printf("%c", ch);
    }
 
    fclose(ifp);
    fclose(ofp);
}
 
// Driver code
void main()
{
    findAndReplaceInFile();
}

Cómo ejecutar el código anterior:

  1. Copie el código fuente desde aquí y péguelo en un IDE fuera de línea
  2. Guarde el programa.
  3. Cree un archivo llamado » file_search_input.txt » y guárdelo en la carpeta donde guardó el programa copiado anteriormente.
  4. Ahora abra la terminal o el IDE fuera de línea y ejecute el programa

Producción:

Output from codeblocks IDE

Publicación traducida automáticamente

Artículo escrito por ab1998dob y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *