Pregunta

Tengo un archivo de texto muy grande, y mis necesidades de los programas protectores y de vez en cuando a reemplazar una sola línea de datos (nueva línea: '\ n'). ¿Cómo puedo hacer esto de manera eficiente? Escribir el archivo completo a la vez no es una opción.

He estado buscando en NSFileHandle, y parece que va a hacer lo que quiera; en este momento estoy teniendo problemas para averiguar cómo encontrar la línea X, y luego reemplazarlo con los datos de una cadena. Creo que después de que se han hecho, todo lo que hay que hacer es llamada synchronizeFile, ¿verdad?

Le agradezco su ayuda!

¿Fue útil?

Solución

No se puede realmente hacer esto sin tener que escribir todo el archivo. Se podría tratar de comienzo de la línea y luego escribir la nueva línea. Pero primero tendría que saber el desplazamiento de esa línea. Si usted no tiene ya que esto significa que la lectura del archivo desde el principio a esa línea. Posteriormente, se podría escribir la nueva línea, pero sólo si es exactamente la misma longitud que la línea original. Si es más largo que va a sobrescribir la siguiente línea - no hay manera de insertar datos en un archivo. Si la nueva línea es más corta que la anterior final de la antigua línea permanecerá. El mismo requisito de longitud también es difícil. Esto significa que la misma longitud en bytes. Dependiendo de la codificación de caracteres que algunos caracteres podría requerir más bytes que otros.

Si realmente necesita hacer esto y tienen que trabajar para casi todos los casos habría que utilizar esos pasos:

  1. leer todo el archivo para averiguar el desplazamiento de la línea que le interesa
  2. Se desplaza hasta el desplazamiento de la línea
  3. Escribir la nueva línea
  4. Escribir el resto del archivo se lee en el paso 1.

Este algoritmo funciona, no importa cuán larga o corta las líneas son o cómo se codifican. Pero esto probablemente será más caro que acaba de escribir el archivo completo, especialmente si lo tienes en la memoria de todos modos.

¿Usted ha verificado que en realidad no es aceptable para escribir todo el archivo o está haciendo la optimización prematura aquí? Si su archivo de texto es realmente tan grande que debe estar considerando una base de datos, como SQLite, o el uso de datos básicos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top