|
|
|
|
Strumenti |
17-02-2011, 11:53 | #1 |
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
[C] lettura dinamica di caratteri
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: Codice:
char *parola=NULL; parola = (char*)malloc( 256 * sizeof(char)); memset(parola,0,256 * sizeof(char)); fscanf(fileTesto,"%s", parola); come posso farlo in modo dinamico, cioè senza sapere a priori quanti caratteri andrò a leggere? spero che qualcuno mi possa aiutare.. grazie! |
17-02-2011, 12:19 | #2 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
c'è il modo comodo, cioè il memory mapping, però devi usare le api del sistema operativo, quindi perdi compatibilità, altrimenti c'è il modo lungo.. usi fgets per leggere un po' alla volta
|
17-02-2011, 14:26 | #3 |
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
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! |
17-02-2011, 15:06 | #4 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
boh, mica ho capito cosa devi fare
|
17-02-2011, 19:30 | #5 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
puoi fare semplicemnte che leggi la dimensione del file e poi allochi la memoria in base alla dimensione
Codice PHP:
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:53.