¿Cómo inserto y elimino algunos caracteres en medio de un archivo?

4 minutos de lectura

¿Como inserto y elimino algunos caracteres en medio de un
Posibilidades infinitas

Quiero insertar y eliminar algunos caracteres en medio de un archivo.

fopen() y fdopen() solo permiten agregar al final.

¿Hay algún método simple o biblioteca existente que permita estas acciones?

  • Se recomienda crear un nuevo archivo con datos insertados. Al finalizar, cambie el nombre y elimine el original.

    – chux – Reincorporar a Monica

    25 de febrero de 2015 a las 19:26

Como ya le han dicho otros, debe hacerlo manualmente y usar fseek para llegar al lugar en el que debe insertar o agregar caracteres. Puede agregar fácilmente nuevos caracteres en el medio haciendo lo siguiente:

  1. Vaya al último byte del archivo y almacene el tamaño de archivo antiguo del archivo.
  2. Vaya a donde desea insertar los nuevos caracteres (digamos que esta es la posición): fread (tamaño del archivo anterior – posición) bytes, y guárdelos en un búfer.
  3. fbuscar posicionarse de nuevo.
  4. fescribe tus nuevos personajes.
  5. fescribe el búfer que leíste previamente.

Si desea eliminar caracteres en el medio, esto es más complicado. En realidad no se puede hacer un archivo más corto. Tienes dos posibilidades: en la primera, simplemente

  1. abra el archivo y lea el archivo omitiendo los caracteres que desea eliminar y guárdelos en un búfer
  2. Cierra y vuelve a abrir el archivo con “b”, para que se borre su contenido,
  3. Escriba el búfer y cierre el archivo.

En la segunda posibilidad, usted:

  1. Lea en un búfer los caracteres anteriores a los que desea eliminar.
  2. fbusque hasta el principio de los caracteres que desea eliminar
  3. fescribe el búfer.
  4. Recorta el resto del archivo.

El punto cuatro es “complicado”, porque no existe una forma estándar (portátil) de hacerlo. Una posibilidad es utilizar las llamadas al sistema del sistema operativo para truncar el archivo. Otra posibilidad, más simple, es simplemente escribir EOF en el punto 4. El archivo será probablemente más grande de lo que debería ser, pero funcionará.

  • Muchas gracias amigo, creo que sabes más cosas sobre esto. ¿Podemos hablar un poco de esto en otro lugar?

    – Posibilidades infinitas

    13 de marzo de 2010 a las 17:22

  • Estoy interesado en el tema de buscar la posición de un texto en un archivo. ¿Tal vez hay una buena manera o tengo que probar carácter por carácter?

    – Posibilidades infinitas

    13 de marzo de 2010 a las 17:27

  • Buscar en un archivo de texto es, sí, básicamente una cuestión de probar carácter por carácter. Pero ese es otro tema totalmente diferente: puede obtener la ayuda de expresiones regulares, por ejemplo.

    – Baltasarq

    15 de marzo de 2010 a las 9:17

No existe un método sencillo. Tienes que hacerlo manualmente. Por ejemplo:

  1. Lea el fragmento que desea insertar antes en la memoria
  2. Buscar una nueva posición
  3. Escribe el fragmento que acabas de leer en la nueva posición
  4. Busque hacia atrás donde desea insertar
  5. Escribe los nuevos datos.

  • ¡Gracias! Así que tengo que usar “fopen(“1.txt”,”w”);” y luego buscar? 🙂 Según te entiendo, la respuesta es sí a mi pregunta.

    – Posibilidades infinitas

    12 de marzo de 2010 a las 7:24

  • @Infinito: Usar fopen("1.txt", "r+") que se abre para leer y escribiendo. Modo "w" sobrescribe cualquier archivo que pudiera haber existido previamente, dejándolo con un archivo vacío.

    – Greg Hewgill

    12 de marzo de 2010 a las 7:25


  • No entiendo los pasos 2 y 3. Dios mío, ¿te refieres a fragmentar un archivo temporal? o tampón?. la idea que tengo en mente es anexar el tamaño en bytes de lo que se quiere insertar al tamaño en bytes del origen del archivo. y luego escribir al

    – Vicente Thorpe

    25 de marzo de 2019 a las 20:29


Utilizar buscar función para mover el puntero del archivo a la ubicación adecuada del archivo y luego puede realizar una escritura allí. Pero, para esto, debe saber cuántos bytes desde el final o el principio del archivo es su área preferida para escribir.

1647670265 510 ¿Como inserto y elimino algunos caracteres en medio de un
JS5

Teniendo en cuenta lo publicado por Baltasarq, escribí las siguientes líneas. Necesita saber la posición en la que desea insertar los caracteres

long Fin;
long lSize;
fseek(fd, 0L, SEEK_END);
Fin = ftell(fd);//get the old file size
fseek(fd, position, SEEK_SET);//"position" must be declared and initialized 
char * buffer;
lSize = Fin - position;//length from where you want to insert the chars to the eof

buffer = (char*) malloc(sizeof(char) * lSize);
size_t result = fread(buffer, 1, lSize, fd);//fread (Fin - position) into buffer
fseek(fd, position, SEEK_SET);//fseek to position

fputs(word, fd);//word is a char pointer that contains the text to be inserted
fputs(buffer, fd);//fwrite the buffer

De hecho, usé este código (después de algunas modificaciones) para triplicar las palabras que contienen cada vocal, en un archivo dado.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad