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.
- Hacer objetos de ARCHIVO (ifp y ofp)
- Abra dos archivos, uno para la entrada de archivos en modo lectura y otro en modo escritura+
- Verifica que el archivo se abra correctamente
- Lea el contenido del archivo de entrada existente palabra por palabra
- 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»
- 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».
- Luego comparamos «leer» con «wordToBeFind» y si el resultado es verdadero, usamos «strcpy()» para reemplazar «leer» con «wordToBeReplacedWith».
- Mostrar el reemplazo de palabras a través de printf
- 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:
- Copie el código fuente desde aquí y péguelo en un IDE fuera de línea
- Guarde el programa.
- Cree un archivo llamado » file_search_input.txt » y guárdelo en la carpeta donde guardó el programa copiado anteriormente.
- Ahora abra la terminal o el IDE fuera de línea y ejecute el programa
Producción: