12.10.1 Oggetti MultiFile

Un'istanza MultiFile possiede i seguenti metodi:

readline( str)
Legge una riga. Se la riga è composta da dati (non un separatore di sezione o un marcatore di fine o un vero EOF) la restituisce. Se la riga corrisponde al delimitatore impilato più recentemente, restituisce '' ed imposta self.last a 1 o a 0, a seconda che la corrispondenza sia o non sia un marcatore di fine. Se la riga corrisponde ad un qualsiasi altro delimitatore impilato, solleva un'eccezione Error. Al raggiungimento della fine del file sul sottostante oggetto flusso, il metodo genera un errore, a meno che non siano stati estratti dalla pila tutti i delimitatori.

readlines( str)
Restituisce tutte le righe rimanenti in questa parte come lista di stringhe.

read( )
Legge tutte le righe, fino alla sezione successiva. Le restituisce come singola stringa (multiriga). Notare che questo metodo non accetta un argomento legato alla dimensione!

seek( pos[, whence])
Ricerca. Gli indici di ricerca sono relativi all'inizio della sezione corrente. Gli argomenti pos e whence vengono interpretati come nella ricerca su file.

tell( )
Restituisce la posizione nel file relativa all'inizio della sezione corrente.

next( )
Salta le righe fino alla sezione successiva (cioè, legge le righe finché non viene utilizzato un divisore di sezione o un marcatore di fine). Restituisce vero se tale sezione esiste, falso se viene trovato un marcatore di fine. Riabilita il delimitatore impilato più di recente.

is_data( str)
Restituisce vero se str è costituita da dati e falso in caso risulti un limite della sezione. Cosi come scritto, controlla la presenza di un prefisso diverso da '--' all'inizio della riga (cosa che tutti i delimitatori MIME possiedono) ma viene dichiarato cosicché possa essere sovrascritto nelle classi derivate.

Notare che questo test viene utilizzato come avanguardia per i test effettivi sui delimitatori; se restituisce sempre falso rallenterà semplicemente la velocità d'elaborazione, ma non provocherà il fallimento dei test stessi.

push( str)
Inserisce nella pila una stringa di delimitazione. Quando viene trovata come riga di input una versione debitamente corredata di delimitatore, verrà interpretata come divisore di sezione o marcatore. Tutte le operazioni di lettura seguenti restituiranno la stringa vuota per indicare la fine del file, finché una chiamata al metodo pop() non rimuoverà il delimitatore o una chiamata al metodo next() lo riabiliterà.

È possibile inserire nella pila più di un delimitatore. Incontrare il delimitatore inserito più recentemente restituirà EOF; incontrare ogni altro delimitatore solleverà un'eccezione Error.

pop( )
Estrae dalla pila un delimitatore di sezione. Questo delimitatore non verrà più interpretato come EOF.

section_divider( str)
Trasforma un delimitatore in una riga che dividerà la sezione. Come comportamento predefinito, questo metodo antepone '--' (inserito in ogni delimitatore di sezione MIME) ma viene dichiarato in maniera tale che possa essere sovrascritto nelle classi derivate. Questo metodo non ha bisogno di aggiungere in coda LF o CR-LF, dato che il confronto con il risultato ignora gli spazi vuoti iniziali.

end_marker( str)
Trasforma un delimitatore in una riga marcatore di fine. Come comportamento predefinito, questo metodo antepone '--' ed aggiunge in coda '--' (come un marcatore di fine messaggio MIME-multiparte) ma viene dichiarato in maniera tale che possa essere sovrascritto nelle classi derivate. Questo metodo non ha bisogno di aggiungere in coda LF o CR-LF, dato che il confronto con il risultato ignora gli spazi vuoti iniziali.

Infine, le istanze MultiFile hanno due variabili d'istanza pubbliche:

level
Profondità di annidamento della parte corrente.

last
Vero se l'ultima condizione di end-of-file era relativa ad un marcatore di fine messaggio.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.