[Tech] Perl ? Carino, ma...

Franco Bagnoli bagnoli@dma.unifi.it
Mer 18 Apr 2001 12:01:28 CEST


On Wed, 18 Apr 2001, Cosimo Vagarini wrote:

> Claudio Cicali scrisse, il 18-Apr-2001
> > Mi sa che il problema l'ha individuato Franco. Il file (dump di una
> > tabella di database) e' scritto da DOS e forse per questo non riesce a
> > trovare il fine riga. In questo modo cerca di tirarsi tutto il file in
> > memoria.
> 
> Si, sicuramente.
> Puoi usare la read() alla quale puoi indicare il numero di caratteri da leggere
> dal FILEHANDLE.
> 
> while (read(RAWDATA,$line,4096)) {
>   <...>
> }
> 
> oppure....dos2unix

secondo me il file in questione non e' neppure un file testo del DOS,
altrimenti le righe terminerebbero con cr-lf e il perl non avrebbe
problemi. 

Se sei in grado di trovare uno o piu' caratteri che terminano il record,
puoi semplicemente assegnarli a $/ e il perl ti legge il file record per
record. Ma non credo che sia fatto cosi'. Probabilmente il file e' un dump
di strutture, con un contatore iniziale che dice quanto e' lungo il record
e poi i dati, oppure e' a lunghezza fissa.  Se e' cosi' puoi leggere prima
il contatore, eventualmente
convertirlo (unpack) e poi usarlo per leggere il record come ti dice
Cosimo usando read. Oppure usi una "finestra" di ampiezza fissa, magari
concatenandone dinamimacemnte due per evitare di "mancare" un record
perche' la stringa in questione e' nel mezzo (in questo caso devi
eliminare i pattern trovati con s/$pattern//g) ma ti perdi l'identita' del
record e quindi non sai se il pattern lo hai trovato due volte in un
record o una volta in due record...

 
-- 
Franco Bagnoli
Dipartimento di Matematica Applicata "G. Sansone"
Universita' di Firenze, Via S. Marta, 3 I-50139 Firenze, Italy
tel. +39 0554796422, fax: +39 055471787
e-mail: bagnoli@dma.unifi.it






Maggiori informazioni sulla lista flug-tech