You are on page 1of 19

Fonaments de Programaci

Gesti de fitxers

1 de 19

ndex de continguts
Memria externa i memria interna ....................................................................................................3 Fitxers intern i extern ...........................................................................................................................3 Operacions amb fitxers ........................................................................................................................4 Operacions amb fitxers en C ...............................................................................................................4 Obrir un fitxer (fopen).....................................................................................................................5 Tancar un fitxer (fclose)...................................................................................................................5 Exemple 1: Mostrar un fitxer de text per pantalla............................................................................6 Comprovar si hem arribat al final del fitxer (feof)...........................................................................6 Lectura de fitxers de text especificant el format (fscanf).................................................................7 Exemple 1 (segona part de la resposta)............................................................................................7 Escriptura de fitxers de text especificant el format (fprintf)............................................................7 Exercici 1: copiar un fitxer obert sobre un altre (tamb obert)........................................................8 Llegir lnia a lnia (fgets).................................................................................................................8 Exercici 2: comptar el nmero de lnies d'un fitxer.........................................................................8 Escriure lnia a lnia (fputs).............................................................................................................9 Exercici 3: copiar un fitxer lnia a lnia............................................................................................9 Exercici 4: simular el comportament bsic de la comanda cat.....................................................9 Exercici 5: simular el comportament bsic de la comanda wc.....................................................9 Exercici 6: simular el comportament bsic de la comanda cmp.................................................10 E/S de blocs (fitxers binaris)..........................................................................................................10 Mirar on est el cursor del fitxer (ftell)..........................................................................................10 Moure el cursor (o indicador de posici) d'un fitxer......................................................................11 Exemple 2: Calcular la longitud d'un fitxer...................................................................................11 Exemple 2 (segona part de la resposta)..........................................................................................12 Escriptura de registres en un fitxer binari......................................................................................13 Exemple 3: Crear i omplir amb sencers un fitxer binari................................................................13 Exemple 3 (segona part de la resposta)..........................................................................................14 Lectura de registres en un fitxer binari..........................................................................................15 Exemple 4: mostrar els sencers d'un fitxer binari..........................................................................15 Exemple 4 (segona part de la resposta)..........................................................................................16 Exercici 7: Trobar el valor mnim d'un fitxer binari de sencers.....................................................16 Exercici 8: Mostrar en ordre invers els sencers d'un fitxer binari..................................................16

Fonaments de Programaci

Gesti de fitxers

2 de 19

Exercici 9: Sumar els sencers de dos fitxers binaris en un tercer..................................................17 Exercici 10: Modificar els valors senars d'un fitxer binari de sencers...........................................17 Exercici 11: Crear un fitxer binari amb dades de persones............................................................17 Exercici 12: Mostrar les dades presents en un fitxer binari de persones........................................18 Exercici 13: Mostrar per nom les dades d'un fitxer binari de persones..........................................18 Exercici 13: Mostrar per pes les dades d'un fitxer binari de persones...........................................19 Exercici 14: Obtenir les dades d'una persona (sabent el DNI).......................................................19 Exercici 15: Modificar el nom d'una persona (sabent el DNI).......................................................19 Exercici 16: Comprovar quantes vegades apareix un DNI.............................................................19

Fonaments de Programaci

Gesti de fitxers

3 de 19

Memria externa i memria interna


Sabem que la memria interna, s de fcil accs i s la que fa servir el processador per obtenir totes les dades, ara b t alguns inconvenients, com sn que s voltil i que t una limitaci de capacitat encara que avui dia s una capacitat molt gran. Per poder esmenar aquests problemes necessitem un altre tipus de memria, que no sigui voltil i que permeti emmagatzemar quantitats importants d'informaci, aix ho fem en la memria externa. Les estructures on nosaltres desarem la informaci que calgui s'anomenen fitxers; que s'organitzen de forma diferent depenent del sistema de fitxers que faci servir el sistema operatiu en aquell suport de memria externa. Els fitxers s'acostumen a veure com un seguit de carcters, paraules o lnies (en aquest cas parlem de fitxers de text) o b com a registres que contenen un mateix tipus d'informaci en cadascun dels seus camps (llavors diem que sn fitxers binaris): Camps: Nom_estat Alemanya Frana Nom_ciutat Berln Pars Superfcie 357031 674843 N_habitants 82501000 63056200 registre 1 registre 2

Fitxers intern i extern


Un fitxer extern s el conjunt de dades que est enregistrat en el suport de memria externa. El fitxer intern s un objecte definit en el programa que vol accedir al fitxer extern. Exemples (pseudocodi)
tipus ciutat = tupla nom_pas, nom_ciutat : cadena [30]; superfcie : real; n_habitants : enter; ftupla ftipus var fciutat : fitxer de ciutat //declaraci del fitxer intern fvar

Hem definit una variable fciutat de tipus fitxer. El nostre programa ha d'accedir al fitxer extern per exemple ciutat.dat i que dins del programa t el nom fciutat.

Fonaments de Programaci

Gesti de fitxers

4 de 19

Operacions amb fitxers


Per poder fer servir un fitxer des d'un programa, el primer que hem de fer s fer el lligam entre el fitxer extern i la variable de tipus fitxer, aix es fa mitjanant l'operaci obrirFitxer que en pseudocodi quedaria en un exemple com:
tipus ! = tupla ftupla ftipus var f: fitxer de !; error: ; fvar error := obrirFitxer "f, #$itxer%xtern&, ';

s amb aquesta funci que s'estableix el lligam entre el fitxer extern i l'intern (f). A ms, normalment, aquesta funci t ms arguments que ens indicaran com s'obre el fitxer, per exemple: crear-lo si no existeix per a lectura per a escriptura

Quan acabem de fer servir el fitxer, haurem de desfer el lligam entre el fitxer extern i l'intern, aix es fa amb la funci tancarFitxer. Aquesta funci noms admet un parmetre que s la variable de tipus fitxer:
error:=tancarFitxer"f';

D'aquesta forma es retornen els recursos utilitzats al SO.

Operacions amb fitxers en C


Les operacions bsiques dels fitxers en C ens porten en primer lloc a la introducci a un nou tipus de dades:
FILE * fitxer;

Aquest nou tipus de dades s un stream i s el que es fa servir per treballar amb els fitxers de forma cmoda en C. Tamb es pot treballar amb fitxers amb els descriptors per ara ens centrarem en les operacions per a aquest tipus stream. stream s l'objecte que el llenguatge C incorpora perqu es pugui utilitzar qualsevol dispositiu.

Fonaments de Programaci

Gesti de fitxers

5 de 19

Les funcions per tractar fitxers que presenta C en la llibreria stdio.h sn (entre altres): Operaci: Obrir F. de text F. binaris fopen fopen Comprovar feof ftell fseek Moure Llegir fgets / fscanf fread Escriure fputs / fprintf fwrite Tancar fclose fclose

Obrir un fitxer (fopen)


Fa l'enlla entre el fitxer al suport fsic i el fitxer intern (l'stream).
$()% * fopen "const char * nom_extern, const char * mode';

El que retorna s l'stream que farem servir a la resta del programa per treballar amb el fitxer. En cas d'error retorna NULL (0). nom_extern s una cadena que ens dna el nom que t al suport fsic el fitxer amb qu volem treballar. mode es refereix al tipus d'obertura del fitxer (vegeu taula de modes ms abaix).

Mode (*) r w

Funcionalitat: Accs per a lectura; si el fitxer no hi s o no es troba, retorna un error. Accs per a escriptura; si el fitxer no existeix es crea i si existeix es destrueix el seu contingut i s creat de nou sense guardar-ne cap cpia. Mentre s obert, es permet escriure al final (afegint-ne) o damunt la informaci existent. Accs per afegir informaci al final; si el fitxer no existeix el crea. Accs per a llegir i escriure amb la funcionalitat del mode r Accs per a llegir i escriure amb la funcionalitat del mode w

a r+ w+

(*) Hi han molts ms modes, per amb aquests podrem fer tots (o quasi tots) els exercicis segents.

Tancar un fitxer (fclose)


Desf l'enlla entre el fitxer al suport fsic i el fitxer intern (l'stream).
int fclose "$()% * f';

Allibera els recursos al sistema i acaba de desar la informaci. Si funciona b retorna zero, en cas d'error retorna EOF.

Fonaments de Programaci

Gesti de fitxers

6 de 19

Exemple 1: Mostrar un fitxer de text per pantalla


Enunciat: Desenvolupeu una funci per a mostrar un fitxer de text. El nom del fitxer es proporciona com a parmetre. Retornar TRUE si ha pogut mostrar el fitxer i FALSE en cas contrari (el fitxer no es pot obrir). Resposta (primera part): Es pot fer la funci que es demana de manera que noms s'ocupi d'obrir el fitxer, comprovar que es pot obrir i, noms en cas que es pugui, llavors cridar a una altra funci (que far la feina) i tancar el fitxer.

Observeu que la funci mostrarFitxerObert (definida abans de la lnia 17) es pot aprofitar (com es fa a la lnia 37) per mostrar el fitxer stdin que sempre est obert.

Comprovar si hem arribat al final del fitxer (feof)


S'aplica als fitxers de text.
int feof "$()% * f';

Retorna un valor diferent de zero quan s'ha arribat al final del fitxer i zero en cas contrari.

Fonaments de Programaci

Gesti de fitxers

7 de 19

Lectura de fitxers de text especificant el format (fscanf)


s equivalent a la funci habitual de lectura amb format (scanf) per amb un parmetre addicional que es posa al comenament.
int fscanf "$()% * f,const char *format [,ar+uments ]';

Omple els valors dels arguments seguint el format especificat, llegint-los del fitxer f.

Exemple 1 (segona part de la resposta)


A continuaci hi ha el codi de la funci que (llegint carcter a carcter amb la funci fscanf) mostra el fitxer ja obert (f).

Escriptura de fitxers de text especificant el format (fprintf)


s equivalent a la funci habitual d'escriptura amb format ( printf) per amb un parmetre addicional que es posa al comenament.
int fprintf "$()% * f,const char *format [,ar+uments ]';

Envia la cadena amb el format corresponent i substituint-hi els arguments a l'stream f.

Fonaments de Programaci

Gesti de fitxers

8 de 19

Exercici 1: copiar un fitxer obert sobre un altre (tamb obert)


Modifiqueu l'exemple anterior desenvolupant una funci copiarFitxersOberts encarregada de copiar el primer fitxer sobre el segon. Els dos fitxers estan oberts. La resta de modificacions (per fer les proves) es mostren a continuaci.

Llegir lnia a lnia (fgets)


S'aplica als fitxers de text.
char * f+ets "char *linia, int n, $()%* f';

Retorna la cadena linia llegida de l'stream f, tallant quan s'arriba al primer '\n'. La variable linia inclou el carcter '\n'. En cas de lnies de longitud >=n, noms llegeix els (n-1) primers carcters.

Exercici 2: comptar el nmero de lnies d'un fitxer


Desenvolupeu un programa que (usant la funci fgets i suposant que les lnies tenen menys de 200 carcters) ens digui el nmero de lnies que hi ha en un fitxer de text. El nom del fitxer es proporcionar com un argument del programa. Important: cal desenvolupar una funci numLiniesFitxer i una altra numLiniesFitxerObert. Si un fitxer no es pot obrir considerarem que el seu nmero de lnies s zero.

Fonaments de Programaci

Gesti de fitxers

9 de 19

Escriure lnia a lnia (fputs)


S'aplica als fitxers de text.
int fputs "const char * linia, $()% * f';

Envia (escriu) la cadena linia a l'stream f. El carcter '\0' de final de cadena no s'envia a l'stream.

Exercici 3: copiar un fitxer lnia a lnia


Desenvolupeu un programa que admeti dos arguments (corresponents a noms de fitxers) i copii lnia a lnia el primer fitxer sobre el segon. Es considera que les lnies tenen menys de 200 carcters. Important: cal desenvolupar una funci copiarFitxers copiarFitxersOberts que ja heu desenvolupat en l'exercici 1. i modificar la funci

Exercici 4: simular el comportament bsic de la comanda cat


Desenvolupeu un programa que simuli el comportament bsic de la comanda cat de *NIX. s a dir: 1. Ha d'admetre un nmero indeterminat d'arguments que tots seran noms de fitxers. 2. Si no hi ha cap argument es considera que s'ha de llegir de l'entrada estndard. 3. Si hi ha un argument o ms, cal anar llegint successivament cada un dels fitxers especificats. 4. El resultat sempre es mostra en la sortida estndard. 5. Si hi ha algun error (s'especifica un nom de fitxer que no es pot obrir) s'ha de mostrar un missatge adient en la sortida d'error (stderr).

Exercici 5: simular el comportament bsic de la comanda wc


Desenvolupeu un programa que simuli el comportament bsic de la comanda wc de *NIX. s a dir: 1. Ha d'admetre un nmero indeterminat de arguments que tots seran noms de fitxers. 2. Si no hi ha cap argument es considera que s'ha de llegir de l'entrada estndard. 3. Si hi ha un argument o ms, cal anar llegint successivament cada un dels fitxers especificats. 4. El resultat sempre consisteix en una lnia amb el nmero de carcters, paraules i lnies de cada fitxer (indicant al final el nom del fitxer). 5. El resultat sempre es mostra en la sortida estndard. 6. Si hi ha algun error (s'especifica un nom de fitxer que no es pot obrir) s'ha de mostrar un missatge adient en la sortida d'error (stderr).

Fonaments de Programaci

Gesti de fitxers

10 de 19

Exercici 6: simular el comportament bsic de la comanda cmp


Desenvolupeu un programa que simuli (per fitxers de text) el comportament bsic de la comanda cmp de *NIX. s a dir: 1. Ha d'admetre un dos arguments que seran noms de fitxers. 2. Si el nmero d'arguments s incorrecte es considera que s un error (crideu a una funci usage). 3. S'han de comparar els dos fitxers i dir en quin carcter i en quina lnia s'ha trobat la primera diferncia. 4. Si sn iguals no s'escriu res. 5. Si un fitxer s ms curt que un altre el missatge s diferent (mireu el que fa la comanda cmp al vostre sistema). 6. El resultat sempre es mostra en la sortida estndard. 7. Si hi ha algun error (s'especifica un nom de fitxer que no es pot obrir) s'ha de mostrar un missatge adient en la sortida d'error (stderr).

E/S de blocs (fitxers binaris)


Els fitxers binaris sn aquells que contenen les dades en el mateix format que poden tenir els diferents tipus de variables en la memria RAM (encara que tamb es poden llegir com si fossin binaris els fitxers de text, tot i que, la majoria de vegades, no t sentit). Per a tractar amb els fitxers binaris podem escriure/llegir variables escalars, registres ( struct) o vectors (encara que un vector sempre es pot veure con una srie de dades d'un altre tipus). Els fitxers binaris es poden llegir/escriure seqencialment (s a dir, un registre darrere l'altre) o b podem anar a un registre determinat i llegir o escriure en aquella posici del fitxer. Aquest darrer cas s diu accs aleatori (o, segons altres autors, accs directe). El cas seqencial es pot tractar com un cas particular de l'accs aleatori. D'aquesta manera, amb les operacions que veurem a continuaci, el tractament de fitxers binaris es pot fer (des del punt de vista conceptual) molt semblant al tractament de vectors. La diferncia (a part de que les instruccions que s'utilitzen sn diferents) s que el fitxer ens permet afegir registres de manera dinmica (el fitxer pot crixer) i amb molta ms capacitat, mentre que el vector s molt ms rpid per s voltil (quan s'acaba el programa es perd el seu contingut).

Mirar on est el cursor del fitxer (ftell)


S'aplica a fitxers binaris. Ens diu en quina posici (nmero de bytes) est el cursor del fitxer.
lon+ int ftell "$()%* f';

Retorna el valor actual de l'indicador de posici per a l'stream f

Fonaments de Programaci

Gesti de fitxers

11 de 19

Moure el cursor (o indicador de posici) d'un fitxer


S'aplica a fitxers binaris. Per a un s elemental, s convenient usar aquesta funci sempre que es vulgui llegir o escriure un registre.
int fsee,"$()%* f, lon+ int distancia, int ori+en';

Retorna FALSE si no s'ha pogut moure el cursor. La nova posici, calculada en bytes des del comenament del fitxer f, s la suma de distancia i la posici especificada per origen. Origen pot ser SEEK_SET (comptem des del comenament del fitxer), SEEK_CUR (comptem des de la posici actual) o SEEK_END (comptem des del final de fitxer). La figura segent illustra l'efecte de diferents combinacions de valors positius o negatius del segon parmetre (distancia) i del tercer (origen) sobre un fitxer binari que cont 13 registres (numerats del 0 al 12) de tipus char i suposant que la situaci actual del cursor s la corresponent a la posici 6 on hi ha la lletra c.

Cal tenir en compte que el segon parmetre (distancia) no pot ser negatiu en el cas d'utilitzar el valor SEEK_SET com a tercer parmetre. En canvi si podem usar valors positius per a la distncia quan l'origen s SEEK_END: en aquest cas, l'efecte s l'ampliaci de la mida del fitxer.

Exemple 2: Calcular la longitud d'un fitxer


Enunciat: Desenvolupeu una funci per a calcular la longitud d'un fitxer. El nom del fitxer es proporciona com a parmetre. Retornar un nmero negatiu si no aconsegueix obrir el fitxer. Resposta (primera part): Com abans, primer fem la funci que noms s'ocupa d'obrir el fitxer, comprovar que es pot obrir i, en cas que es pugui, cridar a una altra funci (que far la feina) i tancar el fitxer.

Fonaments de Programaci

Gesti de fitxers

12 de 19

Observeu que la funci longitudFitxer obre el fitxer amb el modus r+, s a dir, lectura amb accs aleatori.

Exemple 2 (segona part de la resposta)


A continuaci hi ha el codi de la funci que (usant les funcions fseek i ftell) calcula la longitud del fitxer ja obert (f).

Fixeu-vos que s'utilitza el valor 0L (zero de tipus long) com a segon parmetre i la constant simblica SEEK_END per indicar que volem situar el cursor al final del fitxer: s adir, just a continuaci del darrer registre o, si s'entn millor, en la primera posici lliure.

Fonaments de Programaci

Gesti de fitxers

13 de 19

Escriptura de registres en un fitxer binari


Cal tenir en compte que, en el context dels fitxer binaris, la paraula registre s'aplica a qualsevol tipus de dades, sigui una tupla (struct) o un tipus escalar (int, float, char, long int, ...).
si-e_t f.rite"const /oid *dades, si-e_t mida0, si-e_t n0, $()%* f';

Retorna el nmero de carcters escrits correctament, que pot ser menor que nR*midaR, per noms si es detecta un error de escriptura. Escriu al fitxer f les dades que comencen en *dades, fins a nR elements cada un d'ells de mida midaR bytes.

Exemple 3: Crear i omplir amb sencers un fitxer binari


Enunciat: Desenvolupeu una funci per a crear i omplir de sencers un fitxer binari. El nom del fitxer es proporciona com a parmetre. Retornar FALSE si no aconsegueix crear el fitxer. Els nmeros sencers es llegeixen de l'entrada estndard. Resposta (primera part): Com abans, primer fem la funci que noms s'ocupa d'obrir el fitxer, comprovar que es pot obrir i, en cas que es pugui, cridar a una altra funci (que far la feina) i tancar el fitxer.

Fonaments de Programaci

Gesti de fitxers

14 de 19

Exemple 3 (segona part de la resposta)


A continuaci hi ha el codi de la funci que (usant les funcions fseek i fwrite) omple el fitxer ja obert (f) amb els nmeros sencers que es van llegint de l'entrada estndard.

Fonaments de Programaci

Gesti de fitxers

15 de 19

Lectura de registres en un fitxer binari


Recordem que, en el context dels fitxer binaris, la paraula registre s'aplica a qualsevol tipus de dades, sigui una tupla (struct) o un tipus escalar.
si-e_t fread"const /oid *dades, si-e_t mida0, si-e_t n0, $()%* f';

Retorna el nmero de carcters llegits correctament, que pot ser menor que nR*midaR, per noms si es detecta un error de lectura. Llegeix del fitxer f guardant les dades en la variable indicada per *dades, fins a nR elements cada un d'ells de mida midaR bytes.

Exemple 4: mostrar els sencers d'un fitxer binari


Enunciat: Desenvolupeu una funci per a mostrar els sencers d'un fitxer binari. El nom del fitxer es proporciona com a parmetre. Retornar FALSE si no aconsegueix obrir el fitxer. Els nmeros sencers es mostren en la sortida estndard. Resposta (primera part): Com les vegades anteriors, primer fem la funci que noms s'ocupa d'obrir el fitxer, comprovar que es pot obrir i, en cas que es pugui, cridar a una altra funci (que far la feina) i tancar el fitxer.

Fonaments de Programaci

Gesti de fitxers

16 de 19

Exemple 4 (segona part de la resposta)


A continuaci hi ha el codi de la funci que (usant les funcions fseek i fread) mostra els nmeros sencers llegits del fitxer ja obert (f).

Noteu que, per saber el nmero de registres que hi ha al fitxer, s'usa la funci longitudFitxerObert desenvolupada per a un exemple anterior.

Exercici 7: Trobar el valor mnim d'un fitxer binari de sencers


Desenvolupeu una funci minimDeFitxer per a trobar el valor mnim dels presents en un fitxer binari de sencers (el nom del fitxer s el primer parmetre de la funci). Aquesta funci, com ja hem fet a exemples i exercicis anteriors, ha d'usar una funci minimDeFitxerObert.

Exercici 8: Mostrar en ordre invers els sencers d'un fitxer binari


Desenvolupeu una funci mostrarInversFitxer que mostri en ordre invers els sencers presents en un fitxer binari el nom del qual es proporciona com a parmetre: s a dir, cal mostrar primer el sencer que est en la darrera posici, desprs l'anterior del darrer, i aix fins (finalment) mostrar el nmero que est en la posici zero del fitxer binari. Aquesta funci, com ja hem fet a exemples i exercicis anteriors, ha d'usar una funci mostrarInversFitxerObert. Pista: Igual que en altres exercicis (encara que no sempre es digui) s convenient usar la funci longitudFitxerObert desenvolupada per a un exemple anterior.

Fonaments de Programaci

Gesti de fitxers

17 de 19

Exercici 9: Sumar els sencers de dos fitxers binaris en un tercer


Desenvolupeu un programa que admeti tres arguments de la lnia de comandes que corresponen a tres noms de fitxers (els dos primer han d'existir i el tercer es crear de nou tant si existia com si no). Els tres s'han de considerar com a fitxers binaris de sencers i el que ha de fer el programa s sumar cada un dels sencers del primer fitxer amb el corresponent del segon fitxer deixant el resultat en el tercer fitxer. En cas que un dels dos fitxers d'entrada tingui menys registres que l'altre, la suma dels elements de les darreres posicions ser nicament el sencer corresponent del fitxer ms llarg. Important: cal desenvolupar una funci sumarSencersDeFitxers i una altra sumarSencersDeFitxersOberts seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre.

Exercici 10: Modificar els valors senars d'un fitxer binari de sencers
Desenvolupeu una funci canviarSenarsFitxer que recorri un fitxer binari de sencers (el nom del qual es proporciona com a parmetre de la funci) i, incrementi en un el valor de tots aquells sencers presents en el fitxer que siguin senars. Per exemple, si el fitxer inicialment cont els valors (10, 21, 13, 24) acabar tenint els valors (10, 22, 14, 14). Important: cal desenvolupar una funci canviarSenarsFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre. Pista: Cada posici del fitxer binari primer s'ha de llegir i desprs, si escau, s'ha de tornar a escriure amb el valor modificat.

Exercici 11: Crear un fitxer binari amb dades de persones


Desenvolupeu un programa per a crear i omplir un fitxer binari en el que cada un dels registres s del tipus Persona (vegeu ms abaix els camps a la figura). Les dades de les persones es llegeixen d'un fitxer de text en el que cada lnia correspon a un registre dels que s'ha de crear en el fitxer binari. Per exemple, es podria crear un fitxer binari amb el contingut que es mostra a continuaci. DNI 0 1 2 3 450 870 920 Nom Data naixement Altura Pes Cadena nom 1 3 2 0 Cadena altura 2 0 3 1 Cadena pes 2 3 1 0

Punters inicials per a cada cadena>>> Josep Teresa Manel 04-04-1962 27-01-1958 25-04-1967 170 160 168 70 55 78

El nom del fitxer binari es proporciona com a argument del programa. El fitxer de text es pot assimilar a l'entrada estndard (no cal obrir ms fitxers). La primera lnia/registre s especial ja que noms cont tres nmeros sencers (de tipus long int). Es proporciona un exemple: persones2.txt

Fonaments de Programaci

Gesti de fitxers

18 de 19

Exercici 12: Mostrar les dades presents en un fitxer binari de persones


Desenvolupeu una funci mostrarPersonesFitxer que mostri totes les dades presents en un fitxer binari de persones com el creat en l'exercici anterior. El nom del fitxer s el parmetre de la funci. Important: cal desenvolupar una funci mostrarPersonesFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre. Pista: el primer registre (el que est en la posici 0) no cont dades de cap persona.

Exercici 13: Mostrar per nom les dades d'un fitxer binari de persones
Desenvolupeu una funci mostrarPersonesPerNomFitxer que mostri per ordre del camp Nom totes les dades presents en un fitxer binari de persones com el de l'exercici anterior. El nom del fitxer s el parmetre de la funci. Pista: Mireu el contingut del camp Cadena nom tant en el primer registre com en els segents. Pista 2: Com a complement es proporciona la segent figura amb ms registres dels mostrats anteriorment (i sense indicar els valors dels camps Cadena pes ni Cadena altura). Es recomana intentar completar (amb paper i llapis) els valors d'aquests dos camps per entendre el mecanisme.
Cadena Cadena altura pes

Fonaments de Programaci

Gesti de fitxers

19 de 19

Exercici 13: Mostrar per pes les dades d'un fitxer binari de persones
Desenvolupeu una funci mostrarPersonesPerPesFitxer que mostri per ordre del camp Pes totes les dades presents en un fitxer binari de persones com el de l'exercici anterior. El nom del fitxer s el parmetre de la funci. Pista: una vegada determinats (amb paper i llapis) els valors dels camps Cadena pes iCadena altura podeu modificar el fitxer persones2.txt (canviant els valors 00 pels que corresponguin) i crear un fitxer binari (usant el programa desenvolupat per a l'exercici 11). Aquest fitxer binari s el que podeu usar per a fer les proves d'aquesta nova funci. Important: recordeu que cal desenvolupar una funci mostrarPersonesPerPesFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre.

Exercici 14: Obtenir les dades d'una persona (sabent el DNI)


Desenvolupeu una funci obtenirPersonaDNIFitxer que ens retorni (si el troba) un registre de tipus Persona a partir dels parmetres d'entrada corresponents al DNI de la persona cercada i al nom d'un fitxer binari com els usats en els exercicis anteriors. Pista: Una vegada s'hagin retornat (amb return o com a parmetre de sortida) les dades de la persona trobada (si est present al fitxer binari), es poden mostrar des d'una funci de prova que faci servir una nova funci mostrarPersona. Important: recordeu que cal desenvolupar una funci obtenirPersonaDNIFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre.

Exercici 15: Modificar el nom d'una persona (sabent el DNI)


Desenvolupeu una funci modificarNomPersonaDNIFitxer que modifiqui (si existeix) el nom d'una persona a partir dels parmetres d'entrada corresponents al DNI de la persona cercada, al nom nou que volem registrar i al nom d'un fitxer binari com els usats en els exercicis anteriors. Pista: del fitxer binari noms podem llegir/escriure registres complets (persones en aquest cas). Important: recordeu que cal desenvolupar una funci modificarNomPersonaDNIFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre.

Exercici 16: Comprovar quantes vegades apareix un DNI


Desenvolupeu una funci comptarPersonesDNIFitxer que compti (i retorni) quantes vegades apareix un mateix DNI a partir dels parmetres d'entrada corresponents al DNI cercat i al nom d'un fitxer binari com els usats en els exercicis anteriors. Important: recordeu que cal desenvolupar una funci comptarPersonesDNIFitxerObert seguint la mateixa pauta dels exemples i exercicis anteriors de separar la gesti de l'obertura/tancament dels fitxers per un costat i les operacions sobre fitxers oberts per un altre.

You might also like