luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
ciao a tutti, vi spiego in breve il mio problema:
ho un file con mille parole dentro e tramite un numero estratto casualmente prendere la parola che corrisponde a quel numero come potrei fare? a me era venuto in mente un ciclo con un contatore e nel momento in cui quel contatore era uguale al numero estratto prendevo quella parola e la salvavo in un altra variabile ma contando che sono mille parole che diventeranno molte di più (vorrei fare un gioco dell'impiccato inserendo nel file molte parole del vocabolario italiano mi sembra un processo abbastanza lungo questo, quindi vorrei sapere se esiste un modo più rapido. grazie mille
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao!
Come sono organizzate le parole all' interno del file?
(Sono separate da uno spazio, o ognuna occupa una riga)
Come accedi al file?
|
|
subazu (Normal User)
Rookie
Messaggi: 35
Iscritto: 06/08/2011
|
se il file è un file di testo l'unico modo è quello di scorrere il file
se invece è un file binario puoi usare la procedura
Codice sorgente - presumibilmente Plain Text |
seek(<fileLogico>,<intero>)
|
per spostarti all'interno dei vari elementi inserendo il loro indice.
Occhio che gli indici partono da 0, quindi l'indice massimo sarà
Codice sorgente - presumibilmente Plain Text |
highestIndex : LongInt
highestIndex := fileSize(<fileLogico>) - 1
|
A mio parere quindi varrebbe la pena di dichiarare un file binario di stringhe:
Codice sorgente - presumibilmente Pascal |
Type FileOfString : File Of Stirng[30] //la dimensione massime DEVE essere messa
|
che è completamente diverso da un file di testo (Text) |
|
luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
Per Marco:
Al file ci accedo con dei comandi appresi nel libro di testo: assign, reset, rewrite, read, write, eof; le parole del file sono una per ogni riga senza punti e virgola o altro; ora seguirà un esempio di come accedo al file magari sarà più chiaro:
Codice sorgente - presumibilmente Delphi |
program paroliere; var parole: file of string; var stringa:string; Begin assign(parole,'dizionario'); //assegno al file 'dizionario' il nome parole da usare nel programma reset(parole); //uso reset per leggere il file in input while not eof(parole) do Begin read(parole,stringa); //assegno alla variabile stringa ciò che trova nel file parole writeln(stringa); End; close(parole); readln; End.
|
Per Subazu:
Come faccio a sapere se sto usando un file binario? Perché se devo essere sincero credo che io lo stia già usando inconsapevolmente e nel caso in cui non lo stessi usando che comandi dovrei usare per riempire il file con le parole?
Ultima modifica effettuata da luca95 il 03/02/2012 alle 11:59 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
L' errore sta nella definizione della variabile che opera sui file.
Tu dichiari:
Codice sorgente - presumibilmente Pascal |
var parole: file of string;
|
In questo modo, il compilatore, si predispone ad operare su un file binario.
Per lavorare sui file testuali, devi dichiarare:
Codice sorgente - presumibilmente Pascal |
.
Ricordati inoltre che la lettura dei file di testo avviene in questo modo:
Codice sorgente - presumibilmente Plain Text |
READ(fileTesto,elencoVar);
|
legge un elenco di variabili separate da una virgola(ad esempio var1, var2, var3) dalla riga corrente sul file di testo.
Codice sorgente - presumibilmente Plain Text |
READLN(fileTesto,elencoVar);
|
legge un elenco di variabili della riga corrente sul file testo, finchè non si incontrano i simboli di fine linea EOLN.
Nel tuo caso, per salvare ogni parola su stringa, devi usare
readln ( parole,stringa ) ; Ultima modifica effettuata da Poggi Marco il 03/02/2012 alle 13:47 |
|
luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
Quindi dovrei dichiaralo come text e dopo fare read(parole,numero)?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Se operi si file testuali, dichiari txt, e memorizzi la stringa con il comando readln.
Oppure puoi dichiarare un vettore di stringhe, in cui caricare il file.
|
|
luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
Si però penso che tu non abbia capito di cosa ho bisogno, in un file di mille parole qual'è il modo più veloce per prendere una parola qualsiasi se voglio la parola 617 come faccio?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
la lettura dei dati in un file testuale, può avvenire solo in modo sequenziale.
Se vuoi eccedere in un determinato punto del file, allora devi operare su file binari.
Vedi questo esempio: http://pascal-programming.info/lesson11.php
|
|