PDA

Visualizza la versione completa : Ehm.. pascal.. interazione con un file esterno


hcka
19-05-2003, 21:47
Salve, qualcuno mi sa dire se in pascal esiste un qualcosa tipo il:


open classifica.txt for output as #1

del basic?
Please.. tnx a lot..

Shores
19-05-2003, 22:13
Se stai scrivendo in pascal standard:

http://www.nl.freepascal.org/lists/fpc-pascal/2002-January/002593.html

Ciao!

hcka
20-05-2003, 14:26
pascal standard? cioè?
non so se intendi ciò, ma uso turbo pascal..
thanx a lot!

hcka
20-05-2003, 15:31
Allora:
mi serve per creare un database di risultati di un giochetto.. devo inserire la variabile 'nick' e la variabile 'tentativi' in ordine crescente.


assign(f,'RESULTS');
rewrite(f);

poi per scriverci dentro?
e per visualizzare con un


case scelta of
'Y': {Visualizza database}
'N': {Non visualizzare database}

il database con i risultati?
Pliiis help me..

Michele Facchin
20-05-2003, 15:43
reset (f);


Apri il file 'RESULTS' in lettura.



rewrite (f);


Apri il file in scrittura (cancellandone tutto il contenuto se esiste già).



write (f, 'scritta...');


Con questo comando scrivi sul file 'RESULTS'.



read (f, x);


Leggi il dato dal file 'RESULTS' e lo inserisci nella variabile x.



close (f);


Chiudi il file.

hcka
20-05-2003, 16:43
Intanto grazie..
Ed infine


writeln(x);

per scrivere tutto?
x dev'essere string?

Per aprirlo in scrittura senza fargli cancellare il contenuto?

hcka
20-05-2003, 17:04
Mi da:

Runtime error 2 at 0001:0346.

cioè?

Il listato (molto banale e magari anche sporco) è:


program indovinalo;
uses wincrt;
var numero,prova,tentativi,i,manche:integer;
a,b,ta,tb,err,risultante,resultscontenuto:string;
f:file;
begin;
clrscr;
a:=('Il numero e` un po` alto.. prova un po` di meno..');
b:=('Il numero e` un po` basso.. prova un po` di piu`..');
ta:=('Il numero e` TROPPO alto.. prova dalle 10 cifre in meno..');
tb:=('Il numero e` TROPPO basso.. prova dalle 10 cifre in piu`..');
err:=('Il numero incognito e` minore di 100!!!');
randomize;
write('Quante manche vuoi fare? ');
readln(manche);
for i:=1 to manche do
begin;
writeln('');
writeln('Manche ',i,' di ',manche,' :');
numero:=random(100);
tentativi:=0;
repeat
writeln('');
write('Prova ad indovinare il numero.. ');
readln(prova);
if prova>100 then writeln(err) else
if prova>numero+10 then writeln(ta) else
if prova>numero then writeln(a) else
if prova<numero-10 then writeln(tb) else
if prova<numero then writeln(b);
tentativi:=tentativi+1;
until prova=numero;
writeln('');
writeln('Congratulazioni.. L`hai azzeccato dopo ',tentativi-1,' tentativi.. il numero era ',numero,'!!!!!');
write('Inserisci il nick: ');
readln(risultante);
assign(f,'RESULTS');
reset(f);
{read(resultscontenuto);}
rewrite(f);
{write(resultscontenuto);}
write(risultante,(tentativi-1));
read(resultscontenuto);
close(f);
write(resultscontenuto)
end;
repeat until keypressed;
end.

Potete dirmi come correggerlo?
Graz' ciax..
PS: utilizzo TPW1.5.. Turbo Pascal per Windows della Borland International..

Michele Facchin
20-05-2003, 18:17
Non conosco il Turbo Pasca per Windows, comunque ti ho scritto un esempio, in modo che tu possa capire meglio l'utilizzo dei comandi per i file.



Program FileX1;
Uses
crt, dos;
Var
F : File of Char;
c : Char;
Begin
Assign (F, 'sux.txt');
Reset (F);
While (Not (Eof (F))) do
Begin
Read (F, c);
Write (c);
End;
Close (F);
Readln;
End.


Fammi sapere, ciao!

hcka
20-05-2003, 18:37
"Eof" sarebbe "end of file"?
beh.. fra il turbo pascal per dos e quello per windows non cambia nulla (per quanto lo uso io) se non "uses wincrt;" al posto di "uses crt;"..

hcka
22-05-2003, 15:17
program indovinalo;
uses wincrt;
var numero,prova,tentativi,i,manche:integer;
a,b,ta,tb,err,risultante,resultscontenuto,stringa: string;
f:text;
scelta:char;
begin;
clrscr;
a:=('Il numero e` un po` alto.. prova un po` di meno..');
b:=('Il numero e` un po` basso.. prova un po` di piu`..');
ta:=('Il numero e` TROPPO alto.. prova dalle 10 cifre in meno..');
tb:=('Il numero e` TROPPO basso.. prova dalle 10 cifre in piu`..');
err:=('Il numero incognito e` minore di 100!!!');
randomize;
write('Quante manche vuoi fare? ');
readln(manche);
for i:=1 to manche do
begin;
writeln('');
writeln('Manche ',i,' di ',manche,' :');
numero:=random(100);
tentativi:=0;
repeat
assign(f,'RESULTS.txt');
reset(f);

while (not (Eof (f))) do
begin
read(f, stringa);
resultscontenuto:=(resultscontenuto+stringa);
end;

close(f);
writeln('');
write('Prova ad indovinare il numero.. ');
readln(prova);
if prova>100 then writeln(err) else
if prova>numero+10 then writeln(ta) else
if prova>numero then writeln(a) else
if prova<numero-10 then writeln(tb) else
if prova<numero then writeln(b);
tentativi:=tentativi+1;
until prova=numero;
writeln('');
writeln('Congratulazioni.. L`hai azzeccato dopo ',tentativi-1,' tentativi.. il numero era ',numero,'!!!!!');
write('Inserisci il nick: ');
readln(risultante);
assign(f,'RESULTS.txt');
rewrite(f);
write(f, resultscontenuto,'');
write(f, '',risultante,' , ',(tentativi-1));
close(f);
end;
writeln('');
write('Vuoi visualizzare il database dei punteggi? [Y]es - [N]o ..');
readln(scelta);
assign(f,'RESULTS.txt');
reset(f);

while (not (Eof (f))) do
begin
read(f, stringa);
resultscontenuto:=(resultscontenuto+stringa);
end;

close(f);
case scelta of
'Y': writeln(resultscontenuto);
'y': writeln(resultscontenuto);
end;
repeat until keypressed;
end.

non mi funge.. scrive un bordello di volte la stessa riga!

Loading