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 - Pagina 2

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


Messaggi: 35
Iscritto: 06/08/2011

Segnala al moderatore
Postato alle 20:38
Venerdì, 03/02/2012
Si alla fine comunque tutti i file sono binari, la differenza la fa il modo in cui li leggi.
Ora non so se sia obbligatorio, ma è per me scontato che se dichiari un file binario come il tuo, con delle stringhe, gli devi mettere una dimensione fissa.
Codice sorgente - presumibilmente Pascal

  1. var parole: file of string;


per poterlo scorrere in modo non sequenziale si deve mettere per forza una dimensione fissa alla stringa, questo perché la lunghezza variabile delle variabili del record (i file binari sono composti di record mi hanno insegnato) non ci permette di sapere dove inizia e dove finisce uno qualsiasi di questi record.
E' infatti molto semplice il calcolo:
dimensioneDelRecord(in Byte) * numeroRecordaCuiSiVuoleAccedere (intero)

Quindi prima cosa metti un lunghezza fissa alla stringa, utilizzando per buon costume un costane.
Codice sorgente - presumibilmente Delphi

  1. Const dimensioneMassimaParole = 10;
  2. Type  parole = file of string[dimensioneMassimaParole];



Seconda cosa, per scorrere il binario esiste la procedura Seek(<fileLogico>,<indice>;), che sposta il file nel record numero <indice>.
Quindi un esempio:

Codice sorgente - presumibilmente Delphi

  1. Uses
  2.   sysutils; //libreria contenente la funzione per verificare se un file esiste
  3. Const
  4.   Path = "percorsoMioFile/nomeMioFile.dat"; //percorso del mio file
  5.   dimensioneMassimaParole = 10; //dimensione massima di una parola
  6. Type
  7.   parole = file of string[dimensioneMassimaParole]; //creo il mio tipo di file
  8. Var
  9.   mioFile : parole; //il file
  10.   dimensioneF : Integer; //numero di elementi nel file
  11.   indice : integer ;  //indice del record del file da leggere
  12.   buff : String[dimensioneMassimaParole] //variabile temporanea dove salvare la stringa
  13.  
  14. Begin
  15.  
  16. //Apro il file
  17.   Assign(mioFile,Path);
  18.   If FileExists(Path) Then
  19.      Reset(mioFile) //apre il file in lettura E scrittura
  20.   Else
  21.      Rewrite(mioFile); //creo il file in lettura E scrittura
  22.   //appena aperto il mio file è in posizione del primo record (numero 0 )
  23.   //che sia stato cerato o aperto
  24.  
  25. //ora estraggo una stringa a caso dal file
  26.   dimensioneF := filesize(mioFile); //restituisce il NUMERO DI ELEMENTI
  27.  
  28.   If dimensioneF <> 0 then //se il file non è vuoto
  29.     Begin
  30.     //ora genero un numero casuale
  31.     Randomize(); //inizzializzo il generatore
  32.     indice := Random(dimensioneF);
  33.     // genera un numero compreso fra 0 e dimensioneF -1
  34.     // N.B. il record il posizione dimensioneF è un record vuoto!!!!
  35.     Seek(mioFile,indice); //sposto il mio file nel record numero indice
  36.     read(mioFile,Buff); //leggo la stringa
  37.     End
  38.   Else
  39.     Writeln('il file è vuoto!!!!!');
  40.  
  41.   Writeln(buff); //scrivo a video la stringa
  42. End.


Ultima modifica effettuata da subazu il 03/02/2012 alle 20:53
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:19
Venerdì, 03/02/2012
La sintassi corretta per utilizzare i file binari, è quella di definire un tipo apposito.

Nel caso specifico di Luca95, addirittura bisogna trasportare le parole in un file binario.
Il risparmio di tempo, si riduce a poche frazioni di secondo, se non nullo.

Ultima modifica effettuata da Poggi Marco il 03/02/2012 alle 21:23
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo