Sto tentando di modificare un file PostScript di grandi dimensioni in Scala (alcuni hanno dimensioni pari a 1 GB). Il file è un gruppo di lotti, con ogni lotto contenente un codice che rappresenta il numero di lotto, il numero di pagine, eccModifica di un file di grandi dimensioni in Scala
ho bisogno di:
- Cercare il file per i codici di lotto (che sempre iniziare con la stessa riga nel file)
- Contare il numero di pagine fino al codice batch successivo
- Modificare il codice batch per includere il numero di pagine presenti in ogni batch.
- Salvare il nuovo file in una posizione diversa.
mia soluzione attuale utilizza due iteratori (iterA
e iterB
), creata da Source.fromFile("file.ps").getLines
. Il primo iteratore (iterA
) attraversa in un ciclo while all'inizio di un codice batch (con iterB.next
chiamato anche ogni volta). iterB
continua quindi la ricerca fino al prossimo codice batch (o alla fine del file), contando il numero di pagine che passa mentre va. Quindi aggiorna il codice batch alla posizione iterA
, ripetendo il processo.
Sembra molto simile a Scala e non ho ancora progettato un buon metodo per salvare queste modifiche in un nuovo file.
Qual è un buon approccio a questo problema? Devo abbandonare interamente gli iteratori? Preferirei preferirlo senza dover inserire l'intero input o l'output nella memoria in una sola volta.
Grazie!
La mia ipotesi è che questa soluzione manterrà l'intero file in memoria perché su 2.9.x questo modello 'Source.fromFile (" in.ps "). getLines.toStream' tiene in testa allo stream. Vedi http://stackoverflow.com/a/8640680/257449 e https://issues.scala-lang.org/browse/SI-4835. – huynhjl
huynhjl, ho aggiornato il codice di esempio per correggere il bug (fastidioso) che hai trovato. Grazie. – stephenjudkins