Vous êtes sur la page 1sur 2

IUP SI Principes de Programmation

TP 12 - Entres/Sorties et Fichiers

Cette sance va nous permettre dessayer les fonctions permettant de lire ou dcrire des chiers. Les instructions correspondantes ne sont plus strictement fonctionnelles, car elles ne retournent pas de rsultat mais eectue une opration sur le monde extrieur Camel. De telles oprations, comme crire une valeur dans un chier sont des fonctions retournant le type unit. On peut enchaner plusieurs oprations de la sorte avec loprateur ;. Pour faire des oprations sur des chiers (lecture ou criture), un canal dentre/sortie doit tre attribu ces oprations, puis ce canal doit tre referm quand tout est ni. Par exemple, pour crire la chane "bonjour" dans le chier essai.txt, il faut faire quelque chose comme : let canal = open_out "essai.txt";; output_string canal "bonjour";; close_out canal;; Si on veut regrouper des oprations dans une seule fonction, on peut crire : let sauve_chaine strg = let canal = open_out "essai.txt" in output_string canal strg ; close_out canal;; Il y a alors deux sortes doprations, celles en criture et celles en lectures. On utilisera certaines des oprations suivantes : open_out : string -> out_channel Ouvre un canal pour lcriture du chier dont le nom est pass en paramtre. Renvoie le numro du canal. output_char : out_channel -> char -> unit output_string : out_channel -> string -> unit Ecrivent respectivement un caractre et une chane sur le canal de sortie pass en paramtre. output_byte : out_channel -> int -> unit Ecrit un entier cod sur 8 bits. out_channel -> int -> unit Ecrit un entier quelconque sur le

output_binary_int : canal de sortie prcis.

out_channel_length : out_channel -> int donne le nombre de caractres disponible sur le canal donn (pour les chiers texte). close_out : out_channel -> unit Ferme le canal donn.

Les oprations quivalentes en lecture sont les suivantes : open_in : string -> in_channel input_char : in_channel -> char input_byte : in_channel -> int input_binary_int : in_channel -> int in_channel_length : in_channel -> int close_in : in_channel -> unit Lopration suivante permet de lire une ligne du canal dentre (retourne une chane) : input_line : in_channel -> string

Questions
1. Ecrire une fonction qui prend comme paramtre un nom de chier et une liste de chanes de caractres et qui crit les chanes dans le chier. (facile) 2. Ecrire une fonction qui prend comme paramtre un nom de chier et qui lit les lignes du chier en les mettant dans une liste. (facile) 3. Si on veut se servir du codage et dcodage du TP prcdent, il va falloir convertir nos chanes de 0 et de 1 pour les sauver dans un format compact. Le plus simple est de dcouper la chane en petits bouts de 8 bits (un bit = 0 ou 1), et de les sauver en convertissant ces bouts de 8 bits en un entier que lon sauvera avec output_byte. De quelles oprations aura-t-on besoin ? (plus dur). 4. Ecrire une fonction pour rcuprer une chane de 0 et de 1 que lon aura sauv avec la fonction prcdente.