Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Come prendere una determinata stringa in un file
Forum - Pascal - Come prendere una determinata stringa in un file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 12:02
Giovedì, 02/02/2012
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 :)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:45
Giovedì, 02/02/2012
Ciao!

Come sono organizzate le parole all' interno del file?
(Sono separate da uno spazio, o ognuna occupa una riga)

Come accedi al file?

PM Quote
Avatar
subazu (Normal User)
Rookie


Messaggi: 35
Iscritto: 06/08/2011

Segnala al moderatore
Postato alle 18:56
Giovedì, 02/02/2012
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

  1. 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

  1. highestIndex : LongInt
  2. highestIndex := fileSize(<fileLogico>) - 1


A mio parere quindi varrebbe la pena di dichiarare un file binario di stringhe:
Codice sorgente - presumibilmente Pascal

  1. Type
  2.   FileOfString : File Of Stirng[30] //la dimensione massime DEVE essere messa


che è completamente diverso da un file di testo (Text)

PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 11:26
Venerdì, 03/02/2012
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

  1. program paroliere;
  2. var parole: file of string;
  3. var stringa:string;
  4. Begin
  5.   assign(parole,'dizionario'); //assegno al file 'dizionario' il nome parole da usare nel programma
  6.   reset(parole); //uso reset per leggere il file in input
  7.   while not eof(parole) do
  8.     Begin
  9.       read(parole,stringa); //assegno alla variabile stringa ciò che trova nel file parole
  10.       writeln(stringa);
  11.     End;
  12.   close(parole);
  13.   readln;
  14. 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
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:38
Venerdì, 03/02/2012
L' errore sta nella definizione della variabile che opera sui file.
Tu dichiari:
Codice sorgente - presumibilmente Pascal

  1. 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

  1. var parole: text;

.

Ricordati inoltre che la lettura dei file di testo avviene in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. 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

  1. 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
PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 13:49
Venerdì, 03/02/2012
Quindi dovrei dichiaralo come text e dopo fare read(parole,numero)?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:01
Venerdì, 03/02/2012
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.

PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 18:49
Venerdì, 03/02/2012
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?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:36
Venerdì, 03/02/2012
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

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo