Oppure

Loading
08/05/09 14:00
Tentative
Salve a tutti!

Come da titolo, vorrei vederci più chiaro sulle operazioni possibili con i file in Pascal e il corretto procedimento per rendere possibili tali operazioni.

E' da diverso tempo che seguo la guida presente in questo sito e non ho mai avuto problemi a capire le varie sezioni; devo dire anzi che in tempo relativamente breve ho acquisito una certa dimestichezza con le varie strutture, ma c'è una cosa che non riesco proprio a capire: le operazioni con i file :-|

Il capitolo della guida inerente a questo argomento è comunque molto chiaro, ma il problema non sta nelle guide, bensì nel fatto che non riesco proprio a capire la logica. Molte volte infatti, analizzando il codice sono riuscito a capire senza spiegazioni i vari passaggi che il programma avrebbe effettuato una volta avviato, ma per quanto riguarda i file non so proprio dove cominciare a mettere mano per scrivere. Il problema è che so, a livello teorico, cosa si può fare con un file (esempio: append, aggiorna il contenuto di un file senza sovrascrivere, oppure read accede al file preparandolo alla lettura ecc ecc..), ma sul piano pratico: cos'è che effettivamente fa Pascal quando si danno queste istruzioni? Nel senso: il file (ad esempio) viene aperto apparte o ne modifica semplicemente il contenuto? (anche perchè, pur non avendo capito, ho provato a copiare il codice presente sulla guida, ma il risultato ottenuto dopo averlo compilato, senza errori, è una finestra che rimane aperta per un secondo, senza che accada nulla).

Ringrazio anticipatamente chiunque abbia pazienza a sufficienza per spiegare (magari con termini meno pratici), anche in maniera sintetica, questo argomento e chiedo scusa per la banalità del post. :V
aaa
08/05/09 14:28
Anonymous
quando usi i file, per prima cosa il programma deve sapere cosa deve fare con quel file su cui lo vuoi far lavorare, se deve cioè, leggere o scrivere dei dati....

quindi prima di tutto devi assegnare al programma il file su cui deve lavorare, e lo si fa in questo modo:
assign(f, 'file.txt');


dove f è una variabile dichiarata di tipo "textfile" o "file" non ricordo bene quale fosse dei due...

poi se il file deve essere letto gli dai l'istruzione:
reset(f);


a questo punto il programma sa quello che deve fare... e quindi si prepara a leggere il file che gli hai indicato

ora se vuoi leggere la prima riga basta che scrivi:
readln(f,s)


dove s è una variabile di tipo string precedentemente dichiarata

quest'ultima riga di codice semplicemente legge dal file f una riga, poi la inserisce nella variabile s e poi si posiziona nella riga successiva del file, in modo tale che se gli metti un altro read ti legge la riga successiva....

di solito la lettura di un file si mette dentro ad un ciclo while che itera la lettura delle righe fino a che non si è arrivati all'ultima... questa funzione che riconosce se si è arrivati in fondo si chiama eof (end of file) solo che mò nn mi ricordo bene la sintassi di come si usa... mi pare sia:
while eof(f)=false do
begin
readln(f,s);
...
end;



se invece si vuole preparare il file per la scrittura, dopo assign, si deve scrivere
rewrite(f);


anzichè reset

appena viene eseguito quel codice, il programma crea immediatamente un nuovo file vuoto col nome che gli hai passato durante l'assegnamento, oppure se già ce ne era uno esistente con lo stesso nome, lo svuota completamente...


cmq sia, dopo ogni operazione si deve chiudere il file con l'istruzione
close(f);

dopo questo punto non è più possibile leggere o scrivere di nuovo sul file....
per poterlo fare bisogna rifare tutto d'accapo, procedere quindi con l'assegnamento ecc....


Ultima modifica effettuata da Anonymous 08/05/09 14:31
aaa
09/05/09 16:16
Tentative
Innanzitutto grazie per la risposta e per le varie spiegazioni; sono riuscito a capire come strutturare il codice, e infatti me la sono cavata da solo stavolta.

Ho confrontato il programma scritto con varie guide per accertarmi che tutto fosse corretto, e infatti lo era. Solo che una volta avviato il programma non viene stampato nulla a video perchè la finestra appare per mezzo secondo dopodichè sparisce.

Questo accade sia con operazioni di lettura che di scrittura, indipendentemente dal costrutto del ciclo iterativo.
aaa
09/05/09 18:40
Anonymous
basta che metti un
readln;


prima dell'end finale che chiude il programma...

in questo modo prima che la finestra si chiuda devi pigiare invio...
aaa
22/10/09 19:37
maurino
ciao a tutti... sono nuovo e di programmazione conosco moooolto poco... se non qualcosina di pascal... vorrei sapere se questo codice è corretto:

program pippo;
uses crt;
var ft:text;
begin
clrscr;
assign(ft, 'file.txt');
append(ft);
readln
end.

"file.txt" non si apre... magari sono io che non ho capito la funzione del codice... grazie...:k:
aaa
22/10/09 23:55
Anonymous
al posto di append prova a mettere:

reset(ft)
while eof(ft)=false do
begin
writeln(ft);
end; 


ma nn garantisco, che sto facendo a memoria dopo tanto che nn tocco il pascal...
aaa
23/10/09 11:39
maurino
dopo il reset(ft) manca il ";"... ma non funziona comunque:(
aaa
23/10/09 11:59
Anonymous
dove ti da errore???

la variabile dichiarala cosi:
var ft:textfile;
aaa