dijous, 14 d’abril del 2011

fitxers

fitxers

En un programa utilitzem uns identificadors que ens permeten indicar com es realitzar la comunicació entre el programa i l’exterior. Els valors d’aquests identificadors es perdent en finalitzar la execució del programa, si volem conservar aquests valors per ser utilitzats posteriorment en una nova execució del programa o per ser utilitzats en un altre programa caldrà emmagatzemar els valors en un fitxer.

Per poder accedir a un fitxer cal declarar-lo prèviament en el programa amb la paraula reservada FILE OF... que indica que l’identificador assignat és un fitxer.

Exemple

Type

Tarjeta=record

Nom:string[20];

Cognom:string[20];

Num_cass:string[30];

End;

Var

Fitxa = FILE OF tarjeta;

La característica d’aquesta estructura de dades és que els elements del fitxer són accessibles de forma seqüencial ( de un en un començant pel primer)

Preparació dels fitxers

Abans d’utilitzar qualsevol operació d’escriptura o lectura sobre un fitxer aquest s’ha de preparar. Les següents instruccions permeten fer la preparació:

ASSIGN(f,c) assigna un fitxer físic a u fitxer lògic

REWRITE(f) Eliminar tot el contingut del fitxer i el deixa preparat per realitzar escriptures.

RESET(f) prepara el fitxer per la lectura situant el marcador en el primer registre del fitxer.


Operacions de lectura i escriptura en fitxers de dades

READ(F,V) Llegeix els valors del fitxer de dades F i els guarda en la variable V i avança el marcador de lectura al següent component.

WRITE(F,V) escriu els valors de la variable V en el fitxer de dades.

EOF(F) Flase si queden dades per llegir, true si s’ha arribat a final del fitxer.

CLOSE(f) tanca el fitxer.

Operacions de lectura i escriptura en fitxers de text

READ(F,V) Llegeix caràcters, els tradueix al valor del tipus de la variable V i li assigna.

READLN(F,V) Igual que read però a més a més passa a la següent línia de text, ignorant els caracters que queden a la línia.

WRITE(f,e) Tradueix el valor de l’expressió e en una seqüència de caràcters i l’escriu en el fitxer.

WRITE(f) Escriu els caràcters que indican el final de la línia.

EOF(f) Flase si queden línies per llegir, true si s’ha arribat a final del fitxer.

EOLN(f) False si queden caràcters en la línia actual. True si no queden caràcters en la línia ctual.

CLOSE(f) tanca el fitxer.

Vegeu un exemple de tractament amb fitxers.

program ex_fitxers;

uses crt;

type dades=record

nom:string[20];

alias:string[20];

end;

fitxer=file of dades;

procedure inicialitzar(var f1:fitxer);

begin

assign(f1,'c:\jugadors.txt');

rewrite(f1);

close(f1);

end;

procedure obrir(var f1:fitxer);

begin

assign(f1,'c:\jugadors.txt');

reset(f1);

end;

procedure tancar(var f1:fitxer);

begin

close(f1);

end;

procedure afegir(var f1:fitxer; reg1:dades);

begin

seek(f1, filesize(f1));

write('entra el nom:');readln(reg1.nom);

write('entra el alias:');readln(reg1.alias);

write(f1,reg1);

end;

procedure borrar(var f1:fitxer; reg1:dades;nom:string);

begin

while not eof(f1) do

begin

read(f1,reg1);

if reg1.nom<>nom then

{ no hi cap funci¢ que elimini un registre }

{ la eliminaci¢ del registre s'hauria de fer de forma l•gica }

{ ‚s a dir copiar els registre que no s'eliminen a un altre fitxer}

{ un fitxer auxiliar }

end;

end;

procedure llistat (var f1:fitxer; reg1:dades);

begin

Writeln('nom alias');

while not eof(f1) do

begin

read(f1,reg1);

writeln(reg1.nom:2,reg1.alias:20);

end;

end;

procedure menu(var ch:char);

begin

clrscr;

writeln('----- Men£ -----');

writeln;

writeln('1: crear fitxer');

writeln('2: afegir registre');

writeln('3: eliminar');

writeln('4: llistat');

writeln('5: Sortir');

write('entra la opci¢');

readln(ch);

end;

var f:fitxer;

reg:dades;

op:char;

nom:string[20];

begin

repeat

repeat

menu(op);

until op in['1'..'5'];

case op of

'1':inicialitzar(f);

'2':begin

obrir(f);

afegir(f,reg);

tancar(f);

end;

'3':begin

obrir(f);

write('entra nom a leiminar');

readln(nom);

borrar(f,reg,nom);

tancar(f);

end;

'4':begin

obrir(f);

llistat(f,reg);

writeln('prem una tecla per continuar');readkey;

tancar(f);

end;

end;

until op='5';

end.

Exercicis sobre fitxers

7.-1 Proveu l’exemple anterior i implementeu el mòdul d’eliminar un registre del fitxer de dades.

7.-2 Realitzeu una nova versió del programa SUDOKO on definiu un fitxer de dades on s’emmagatzemi el nom i el temps del jugador. El fitxer de dades ha de representar la classificació de les persones que han jugat al SUDOKO i ha d’estar ordenat en funció del temps en que s’ha trigat a resoldre el joc (de menys a més temps).

El Programa ha de permetre entra un nou nom si el nom del jugador ja existeix.


Cap comentari:

Publica un comentari a l'entrada