2016-01-16 9 views
6

Sto scrivendo una libreria CL per leggere fogli di calcolo MS Excel (tm) chiamati "xlmanip" (non ancora pronti per la prima serata - legge solo fogli di lavoro "xlsx", funziona per il caso di utilizzo dell'80% di "Voglio operare sul contenuto della cella "... ma sto divagando.)Contenuto ZIP come flusso grigio?

Una cosa che mi preoccupa quando si legge" xlsx "(archivi ZIP in formato XML) è che l'attuale libreria di gestione ZIP, Common Lisp ZIP, scompatta i contenuti compressi come a (vector (unsigned-byte 8)). Per un foglio di calcolo di grandi dimensioni, ciò causerà un problema per l'utente finale.

Un'alternativa a cui ho pensato è il caricamento ritardato, una chiusura automatica che richiede effettivamente il caricamento del foglio di lavoro quando necessario. Tuttavia, questo è solo ritardare l'inevitabile.

Ci sono delle librerie CL di file ZIP là fuori che restituiscono un flusso grigio al contenuto di un componente ZIP rispetto a uno (potenzialmente grande) (vector (unsigned-byte 8))?

Edit: Chiarimento

Sto cercando una funzione componente ZIP che restituisce un flusso, non uno che prende un flusso . Le funzioni che prendono uno stream scrivono i contenuti del componente ZIP direttamente nel file associato allo stream. Preferirei che xlmanip legge da uno stream direttamente come se il componente ZIP fosse (implicitamente, virtualmente) un file.

+0

Commento irrilevante, ma qualcuno sta per chiedere: il codice 'xlmanip' è su gitlab. –

risposta

0

Chipz può decomprimere un ZIP in un flusso. Fornisce una funzione di decompressione in cui gli viene fornito un flusso di output e un flusso di input da decomprimere e restituisce il flusso di output in cui è possibile leggere i contenuti decompressi.

+0

Dalla lettura del codice, scrive direttamente su uno stream, ma non sembra che crei uno stream che può essere letto. Inoltre non soddisfa i requisiti: ZIP è un formato di archivio con un indice, non un file gzip. –

+1

@ScottM: Penso che 'chipz: make-decompressing-stream' possa fare quello che vuoi quando viene dato il' zip :: zipfile-entry-stream' come flusso di input. – Svante

+0

@Svante: 'zip :: zipfile-entry-stream' non viene esportato. (Il mio male ... è, parte della struttura 'zipfile'.) Farò un tentativo. –

Problemi correlati