Exemple "conversion de fichiers" :
// Programme de conversion de fichiers
// Compiler avec : gcc -Wall -g conversion.c -o conversion
#include <stdio.h>
#include <stdlib.h>
#define FORMAT_CHAINE "%%%ds %%f %%%ds %%c %%%d[^\n]"
#define FORMAT_NOMBRE 5
#define TAILLE_COMPTE 16
#define TAILLE_DATE 16
#define TAILLE_COMMENTAIRE 64
#define MAX_FORMAT 64
#define MAX_LIGNE 1024
typedef struct {
char compte[TAILLE_COMPTE];
float somme;
char date[TAILLE_DATE];
char etat;
char commentaire[TAILLE_COMMENTAIRE];
} enregistrement;
int main(int argc,char *argv[]){
if(argc!=3){
fprintf(stderr,"Syntaxe : %s <fichier texte> <fichier binaire>\n",argv[0]);
exit(EXIT_FAILURE);
}
char *texte=argv[1];
char *binaire=argv[2];
FILE *ftexte=fopen(texte,"r");
if(ftexte==NULL){
fprintf(stderr,"Impossible d'ouvrir '%s' en lecture !\n",texte);
exit(EXIT_FAILURE);
}
FILE *fbinaire=fopen(binaire,"w+");
if(fbinaire==NULL){
fprintf(stderr,"Impossible d'ouvrir '%s' en écriture !\n",binaire);
exit(EXIT_FAILURE);
}
char format[MAX_FORMAT];
sprintf(format,FORMAT_CHAINE,TAILLE_COMPTE-1,TAILLE_DATE-1,TAILLE_COMMENTAIRE-1);
char ligne[MAX_LIGNE];
while(fgets(ligne,MAX_LIGNE,ftexte)!=NULL){
enregistrement e;
int nombre=sscanf(ligne,format,e.compte,&e.somme,e.date,&e.etat,&e.commentaire);
if(nombre!=FORMAT_NOMBRE){
fprintf(stderr,"Mauvais format : %s",ligne);
exit(EXIT_FAILURE);
}
if(fwrite(&e,sizeof e,1,fbinaire)!=1){
fprintf(stderr,"Echec d'écriture sur '%s' !\n",binaire);
exit(EXIT_FAILURE);
}
}
fclose(ftexte);
fclose(fbinaire);
return 0;
}