Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    [Pascal] Operazioni file

    Per aprire un file in lettura sono messo così

    codice:
       assign(fp,'words.dat');  { apro il file }
       reset(fp);               { apro in lettura }
       close(fp);               { chiusura flusso }
    mi servirebbe sapere come fare a conoscere il numero di linee del file words.dat e di riuscire a leggerne 1a casuale (con seek mi pare).

    ciao grazie

  2. #2
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    allora, per risolvere il tuo problema hai bisogno di due funzioni predefinite da pascal, che sono "seek" e "filesize".

    La funzione Filesize restituisce il numero di record presenti nel file e la sua sintassi è la seguente:
    var num_record:integer;
    begin
    [...]
    [...]
    num_record:=filesize(words.dat);

    Invece la funzione seek si posiziona nel file words.dat sul record numero n (nell'utilizzare questa funzione bisogna tenere conto che la numerazione parte da zero quindi se nel file ci sono 9 record la funzione restituisce il numero 8!!!).

    La risposta al tuo problema è la seguente:
    var a:integer;
    begin
    randomize;
    a:=random(filesize(words.dat));
    seek(words.dat,a);
    {e poi a questo punto puoi iniziare a far stampare a video il file casuale trovato!! )

    spero di essere stato chiaro, se hai ancora problemi dimmelo pure che sono felice di aiutarti!! ciao :gren:
    Pochi vivono: la maggior parte della gente esiste e nulla più...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Chiarissimo!
    Se rincontrero' errori te lo faro' sapere.
    Grazie

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Ho alcuni problemi
    tu hai risposto bene ma ho difficolta' ad applicare le nozioni date

    codice:
    ...
    var fp:text;
    var nrecord:integer;
    var word:string[100];
    ...
    begin
       assign(fp,'words.dat');  { apro il file }
       reset(fp);               { apro in lettura }
       nrecord:=random(filesize('words.dat'));
       seek(fp,nrecord);
       writeln(fp);
       close(fp);               { chiusura flusso }
    end;
    ...
    non so come agire, il compilatore dà errore

  5. #5
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    Guarda io riuscirei a risolverti il problema usando dei file di record che sono più facili da gestire, se a te non cambia nulla dimmelo che ti invio il codice...

    Fammi sapere ciao :gren:
    Pochi vivono: la maggior parte della gente esiste e nulla più...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    non ho capito bene che vuoi dire cmq il file che voglio leggere e' così + o - (quindi nn cambia + di tanto)

    _________________________________
    ciao
    tastiera
    desossiribosio
    palmare
    wireless
    risonanza
    silicio
    semiconduttore
    fotovoltaico
    _________________________________

  7. #7
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    allora il record di file viene dichiarato così:

    codice:
     type t_amico : RECORD
                            nome:string;
                            cognome:string;
                          END;
           var amici:file of amico;
    Beh se te vuoi un programma che ti legga una parola casuale contenta in un file io posso fartelo, però l'unico modo che io conosco per farlo è usando i file di record!!!
    Pochi vivono: la maggior parte della gente esiste e nulla più...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Allora son messo così

    codice:
    TYPE worder : RECORD parolaimpiccato:string;
    VAR fp:file of worder;     { variabile di tipo file }
    ...
    begin
       assign(fp,'words.dat');  { apro il file }
       reset(fp);               { apro in lettura }
    
       close(fp);               { chiusura flusso }
    end;
    ...
    cosa devo aggiungere per leggere dal file?

  9. #9
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    Ok ora ho capito tutto!!!! Se non sbaglio la soluzione al tuo problema è questa!!!

    codice:
    TYPE worder : RECORD 
                    parolaimpiccato:string;
                  END;
    
    VAR fp:file of worder;     { variabile di tipo file }
        parola : worder;       { in questa variabile pascal caricherà la
                                 parola letta dal file }
        casuale:integer;       { numero del record casuale }
    ...
    begin
       assign(fp,'words.dat');  { apro il file }
       reset(fp);               { apro in lettura }
       casuale:=random(filesize(fp))+1;
       seek(casuale,fp);
       read(fp,parola);
       writeln(parola.parolaimpiccato);
       close(fp);               { chiusura flusso }
    end;
    Ora non dovresti avere più problemi!!! :quipy:
    Pochi vivono: la maggior parte della gente esiste e nulla più...

  10. #10
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    Scusami ho fatto un piccolo errore nella riga di codice:

    codice:
     casuale:=random(filesize(fp))+1;
    il "+1" non ci va!!!!! quindi tu scrivi

    codice:
     casuale:=random(filesize(fp));
    Pochi vivono: la maggior parte della gente esiste e nulla più...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.