0% ont trouvé ce document utile (0 vote)
12 vues2 pages

Correc Td5

Le document présente un code en C pour lire un certain nombre de lignes d'un fichier et les écrire dans un nouveau fichier. Il inclut des vérifications d'erreurs pour l'ouverture des fichiers et la lecture des lignes. La fonction principale permet de spécifier les noms des fichiers et le nombre de lignes à copier via des arguments de commande.

Transféré par

nade X
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues2 pages

Correc Td5

Le document présente un code en C pour lire un certain nombre de lignes d'un fichier et les écrire dans un nouveau fichier. Il inclut des vérifications d'erreurs pour l'ouverture des fichiers et la lecture des lignes. La fonction principale permet de spécifier les noms des fichiers et le nombre de lignes à copier via des arguments de commande.

Transféré par

nade X
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi