Oppure

Loading
17/02/11 11:56
giova87
ciao a tutti!!!

ho un problema con la lettura di un file..
io devo leggere un file di 250 MB che contiene n caratteri, tutti attaccati senza spazi..

avevo fatto in questo modo:

char *parola=NULL;

   parola = (char*)malloc( 256 * sizeof(char));
   memset(parola,0,256 * sizeof(char));

   fscanf(fileTesto,"%s", parola);


solo che il mio numero di caratteri è di gran lunga superiore a 256..

come posso farlo in modo dinamico, cioè senza sapere a priori quanti caratteri andrò a leggere?

spero che qualcuno mi possa aiutare.. grazie!
Ultima modifica effettuata da giova87 17/02/11 11:56
aaa
17/02/11 12:45
HeDo

ci sono molti modi di fare quello che chiedi, ma la domanda principale che ti dovresti fare è

"ma mi servono veramente tutti i 250Mb di file in memoria allo stesso tempo?"

se la risposta è si, preparati ad avere oltre 250 Mb di ram utilizzati dal tuo programma e un tempo di caricamento non indifferente (diversi secondi con un hdd medio: 250Mb / 70Mb/sec = 3,5 sec)

se invece la risposta è no, dovresti considerare un metodo di accesso al file diverso, in particolare l'accesso casuale risolverebbe perecchie cose: in primis non dovresti mantenere in memoria tutto il file, ma ti bastano pochi chunks e poi il tempo di caricamento sarà praticamente nullo, giusto il tempo di arrivare all'indice all'interno del file che contiene l'informazione che ti serve.

aaa
17/02/11 14:27
giova87
forse mi sono spiegato male!
io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032 "a" consecutive,senza spazi..
un altro è composto da 255 "a" consecutive
uno da 256 "a" consecutive
e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!


aaa
17/02/11 14:34
HeDo
Postato originariamente da giova87:

forse mi sono spiegato male!
io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032 "a" consecutive,senza spazi..
un altro è composto da 255 "a" consecutive
uno da 256 "a" consecutive
e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!



ma fatti delle domande... a cosa diavolo serve leggere (o anche solo avere) un file di 250Mb che contiene solo "a"???
aaa
17/02/11 14:44
TheKaneB
in effetti... parti da capo e spiega dettagliatamente il problema che intendi risolvere. Qui c'è qualcosa di estremamente inefficiente che può sicuramente essere migliorato di un fattore 1:1000 :-)
aaa