Estoy intentando modificar un archivo PostScript grande en Scala (algunos tienen un tamaño de 1 GB). El archivo es un grupo de lotes, cada lote que contiene un código que representa el número de lote, número de páginas, etc.Modificar un archivo grande en Scala
necesito:
- Buscar en el archivo para los códigos de lote (que siempre comience con la misma línea en el archivo)
- Cuente el número de páginas hasta el siguiente código de lote
- Modifique el código del lote para incluir cuántas páginas hay en cada lote.
- Guarde el nuevo archivo en una ubicación diferente.
Mi solución actual utiliza dos iteradores (iterA
y iterB
), creados a partir de Source.fromFile("file.ps").getLines
. El primer iterador (iterA
) se desplaza en un ciclo while al comienzo de un código de lote (también se llama a iterB.next
cada vez). iterB
luego continúa buscando hasta el próximo código de lote (o el final del archivo), contando el número de páginas que pasa a medida que avanza. Luego, actualiza el código del lote en la posición iterA
, y el proceso se repite.
Esto parece muy similar a Scala y todavía no he diseñado una buena manera de guardar estos cambios en un nuevo archivo.
¿Cuál es un buen enfoque para este problema? ¿Debo deshacerme de los iteradores por completo? Preferiría hacerlo sin tener que tener toda la entrada o salida en la memoria a la vez.
Gracias!
Supongo que esta solución mantendrá todo el archivo en la memoria porque en 2.9.x este patrón 'Source.fromFile (" in.ps "). getLines.toStream' se mantiene en el encabezado de la secuencia. Consulte http://stackoverflow.com/a/8640680/257449 y https://issues.scala-lang.org/browse/SI-4835. – huynhjl
huynhjl, he actualizado el ejemplo de código para corregir el error (molesto) que has encontrado. Gracias. – stephenjudkins