Printed by nicomett
Mar 03, 14 10:30 correc_td5 Page 1/3 Mar 03, 14 10:30 correc_td5 Page 2/3
/**************************************************************************
**************************** TD5 ****************************** /* pb fermeture */
**************************************************************************/
if (fclose(fich_ecrit)!=0) {
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ result=−1;
/* Manipulation de fichiers */ }
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* le fichier a moins de nb_lignes */
#include <stdio.h>
#include <stdlib.h> else if (retour_fgets==NULL) {
#include <strings.h> result=1;
#include <unistd.h> }
#define MAX_CH 80 /* on a lu nb_lignes sans pb : on retourne 0 */
/***************************************************************/ else {
/* fonction qui lit le lire nb_lignes lignes dans le fichier */ result=0;
/* ouvert fich_lect et qui ecrit ces nb_lignes dans le fichier */ }
/* de nom nom_fich_ecrit. Cette fonction doit creer ce fichier */ return result;
/***************************************************************/ }
int EcritFichier(FILE * fich_lect, char * nom_fich_ecrit, int nb_lignes) /***************************************************************/
{ /* main − 1ere version */
FILE * fich_ecrit; /***************************************************************/
char * retour_fgets; int main()
char chaine_lue[MAX_CH]; {
int termine=0; FILE * fich_lect;
int nb_lignes_lues; char nom_fich_lect[MAX_CH];
int result; char nom_fich_ecrit[MAX_CH];
int result_ecrit;
/* creation du fichier dans lequel on va ecrire les nb_lignes */ int nb_lignes;
fich_ecrit=fopen(nom_fich_ecrit,"w"); /* saisie du nom de fichier a lire, du nom du fichier a creer et
du nombre de lignes a copier */
/* ouverture impossible */
printf("Nom du fichier lecture : ");
if (fich_ecrit==NULL) { scanf("%s",nom_fich_lect);
return −1; printf("Nom du fichier ecriture : ");
} scanf("%s",nom_fich_ecrit);
printf("Nombre de lignes : ");
/* on lit nb_lignes lignes si possible */ scanf("%d",&nb_lignes);
nb_lignes_lues=0; /* ouverture en mode lecture du fichier a lire */
while (!termine) {
fich_lect=fopen(nom_fich_lect,"r");
/* la fonction fgets lit au + MAX_CH −1 caracteres */ if (fich_lect==NULL) {
printf("Patate : Le fichier en entree existe pas !\n");
retour_fgets=fgets(chaine_lue,MAX_CH,fich_lect); return −1;
}
/* je teste si la lecture a reussi ou pas */
result_ecrit=EcritFichier(fich_lect,nom_fich_ecrit,nb_lignes);
if (retour_fgets!=NULL) {
return result_ecrit;
/* lecture reussie : je recopie la ligne */ }
fputs(chaine_lue,fich_ecrit); /***************************************************************/
nb_lignes_lues++; /* main − 2ieme version */
/***************************************************************/
/* j’ai fini de lire les nb_lignes */
int main(int argc, char * argv[])
if (nb_lignes_lues==nb_lignes) termine=1; {
} FILE * fich_lect;
else { char nom_fich_lect[MAX_CH];
char nom_fich_ecrit[MAX_CH];
/* lecture impossible : fin de fichier (le retour de fgets est NULL) */ int result_ecrit;
int nb_lignes;
termine=1;
}
} /* Dans cet exemple, les noms des fichiers a lire et ecrire ainsi que le
Monday March 03, 2014 correc_td5 1/2
Printed by nicomett
Mar 03, 14 10:30 correc_td5 Page 3/3
nombre de lignes a extraire sont dans la tableau argv d’arguments de
la commande */
if (argc!=4) {
printf("Usage : commande <nom_fichier_lecture> <nom_fichier_ecriture> <nb_li
gnes>\n");
exit(1);
}
strcpy(nom_fich_lect,argv[1]);
strcpy(nom_fich_ecrit,argv[2]);
sscanf(argv[3],"%d",&nb_lignes);
fich_lect=fopen(nom_fich_lect,"r");
if (fich_lect==NULL) {
printf("Patate : Le fichier en entree existe pas !\n");
return −1;
}
result_ecrit=EcritFichier(fich_lect,nom_fich_ecrit,nb_lignes);
return result_ecrit;
}
Monday March 03, 2014 correc_td5 2/2