Newsgroup: it.comp.lang.c
Titolo: Leggere da file a gruppi di n righe

Ciao, ho un file di testo strutturato nel seguente modo:
%s    %s    %s    %d ........................... %d
dove hop indicato con le notazioni del C le toipologie di dati inseriti.
Devo leggere il file ad n righe alla volta, elbaorare ogni riga, e poi
passare alle n righe succesive sino alla fine del file. Qualcuno ha qualche
idea in proposito? Grazie a tutti, ciao Maurizio

 idea in proposito?
Beh, dipende molto da cosa consiste l'"elaborazione" di ogni riga e in
particolare se c'e' un qualche legame tra le varie righe di ogni
"sessione"...
Comunque, in ogni, caso si trattera' di fare un paio di cicli...

 ha scritto nel messaggio
news:gQskc.171757$rM4.7...@news4.tin.it...

Vatti a leggere la documentazione della fscanf.
Ciao


Grazie questo lo sapevo anche io, mi chiedevo se ci fosse stato un metodo
più furbo tra tutti....tipo una fread....


Non capisco che centri la fscanf con quello che ho chiesto io.

 Non capisco che centri la fscanf con quello che ho chiesto io.
Beh, cosa non capisci?!? Un paio di cicli e un acquisizione dei dati
formattati attraverso questa funzione standard di I/O

 più furbo tra tutti....tipo una fread....
esatto un fread con un paio di cicli, ma finche' non ti decidi a spiegare il
legame che c'e' tra le righe, e' inutile fare dei discorsi...

"PS" <p...@t.it.invalid> ha scritto nel messaggio
news:c6u3go$eb5$1...@lacerta.tiscalinet.it...

Immagina le righe come composte da un'intestzione e dei dati. Praticamente
si riferiscono a misure fatte sui frame di un filmato, ogni frame è diviso
in blocchi, i cui dati raccolti sono memorizzati sulle colonne di ogni riga.
Faccio un esempio:
n_frame=0    n_blocco=0    dati interi del blocco
n_frame=0   n_blocco=0    dati......
n_frame=1    n_blocco=0    dati.....
ecc
io devo elaborare i dati di tutti i blocchi di un frame per volta, quindi
pensavo di leggere il file per n righe, in cui n è il numero dei blocchi e
memorizzare poi in una matrice i dati su cui andrò a fare i miei calcoli,
poi passo alle n righe successive che rappresentano un altro frame, e così
via.
Inizialmente avevo inserito una singola fgets, elaborando la riga con strtok
e funziona, ma non ho considerato che la prova che avevo fatto era su di un
file con un solo frame. Potrei anche andare a confrontare l'ìintestazione,
leggendo una riga per volta, fermandomi quando cambia l'intestazione ho il
cambio frame, cosa cosigli? Qual è più pratico? Ciao grazie della pazienza


Ciao,
secondo la mia opinione, l'uso della fscanf con una stringa di formattazione
costruita ad arte, ti risolverebbe molte noie di scan e quindi il ciclo che
dovresti fare usando la strtok. Le domande che ti sono state poste in
precedenza relativamente ad i dati da elaborare, credo che non fossero
riferite alla tipologia dei dati che devi acquisire dal file, quanto al
fatto che, ad esempio, il blocco che vuoi ricevere sia, o meno, di
dimensione fissa. Questo per poter utilizzare in modo performante la
funzione fread; la quale legge blocchi di dimensione fissa se usata con "b".
In ogni caso, se tu sei il creatore del file, ti converrebbe una scrittura a
record fissi e sequenziali per poterli poi rileggerli nello stesso modo in
cui sono stati scritti e mappati in strutture. Se il tuo caso non ricade in
questi ultimi il cosiglio di utilizzare la fscanf è ottimo; ricorda che la
bufferizzazione della lettura viene automaticamente gestita dalle librerie
"FILE" e che, una di queste funzioni ti permette di modificare la dimensione
del buffer di lettura per ottimizzare il tuo accesso al disco.
Un saluto.