Enrere Mòdul 8
Fonaments de Programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
Creació d'un arxiu de text. Escriptura i lectura de caràcters. Les funcions fgetc() i fputc().

En aquesta pràctica aprendrem com obrir i tancar un arxiu per escriure i per llegir en ell. Coneixerem les funcions per llegir i escriure un únic caràcter. 

 

Desenvolupament de la pràctica

Abans de tot, creeu una nova carpeta per aquest tercer mòdul amb el nom Mòdul_8. Aneu afegint nous arxius per cada nova pràctica o exercici amb els noms que cada vegada es proposi.

Creeu un nou arxiu del tipus C anomenat m8p01.c i escriviu el següent codi:

//m8p01.cc - Creació, escriptura i lectura d'un arxiu -

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE *f;
    char car;

   //procés d'escriptura

    system("clear");
    if((f=fopen("arxiu.txt","w"))==NULL){
        printf("Error al intentar obrir l'arxiu\n");
        return;
    }

    printf("Introdueix un text. Prem return per finalitzar. \n");

    while ((car=getchar())!='\n') putc(car,f);

    fclose(f);


   //procés de lectura

    printf("Lectura de l'arxiu\n");

    if((f=fopen("arxiu.txt","r"))==NULL){
        printf("Error a l'intentar obrir l'arxiu\n");
        return;
    }

    while((car=getc(f))!=EOF) putchar(car);
    putchar('\n');
    fclose(f);

    return 0;
}

 

Captura de l'execució del programa.

Explicació del programa

La següent sentència és una forma habitual d'obrir un arxiu:

if((f=fopen("arxiu.txt","w"))==NULL){
        printf("Error al intentar obrir l'arxiu\n");
        return;
    }

En aquest cas, s'obre un arxiu de nom arxiu.txt en mode escriptura (w). La variable f és una variable punter del tipus FILE. L'estructura FILE està definida a l'arxiu capçalera stdio.h,  per tant és necessari incloure la directiva #include <stdio.h> en qualsevol programa que utilitzi arxius. Si la funció fopen() torna el valor NULL vol dir que ha trobat un error i sortirà el missatge d'error i sortirà del programa.

La següent línia és la que s'encarrega d'escriure en el fitxer els caràcters entrats per teclat. Això és fa sempre que el caràcter llegit del teclat amb la funció getchar() no sigui el caràcter de retorn de línia (\n), és a dir, INTRO. La funció que s'encarrega d'enviar un caràcter al fitxer és la funció putc(), el primer argument d'aquesta funció és un caràcter o variable de caràcter i el segon argument és una variable punter FILE.

    while ((car=getchar())!='\n') putc(car,f);

Després d'escriure el text, es tanca l'arxiu amb la funció fclose(). És important tancar els arxius fonamentalment per dues raons: 

a) per a no sobrepassar el màxim nombre d'arxius oberts que suporta el sistema operatiu.

b) (gairebé sempre el més important) perquè s'escrigui al disc el que hi hagi al buffer, d'aquesta forma no es perdrà la informació en cas que es bloquegi l'ordinador.

Per procedir a la lectura de l'arxiu, es torna a obrir aquest, en aquest cas en mode de lectura (r):

   if((f=fopen("arxiu.txt","r"))==NULL){
        printf("Error al intentar obrir l'arxiu\n");
        return;
    }

La línia:

  while((car=getc(f))!=EOF) putchar(car);

és la que llegeix un caràcter del fitxer (amb la funció getc()) fins que trobi la marca EOF de final d'arxiu i escriu el caràcter llegit a la pantalla amb la funció putchar().

Les quatre funcions d'entrada i sortida tractades en aquesta pràctica són:

getc() Llegeix un caràcter d'un arxiu.
getchar() Llegeix un caràcter de l'entrada estàndard (teclat).
putc() Escriu un caràcter en un arxiu.
putchar() Escriu un caràcter a la sortida estàndard (pantalla).