/*
I - fichiers , Système de Gestion de Fichiers
jusqu'en 1970
II- bases de données (Système de Gestion de Bases de Données)
III-bases de données multimédias (orienté objet)
IV-bases de connaissances (faits & règles(prémisses->conclusions->faits temporaires))
=> mémorisation de données
RAPPEL COURS PRECEDENT :
création et traitement des fichier EN C:
FILE *pf; / recup adresse du fichier
char fich_nom[20]; / nom du fichier
Syntaxe de l'ouverture :
pf=fopen("nom_du_fichier","mode_acces"); / mode r(ead) w(rite) a(ppend)
( si NULL : le fichier n'existe pas)
Lecture de fichier :
fscanf(nom_pointeur_fichier , format_de_sortie_ , données);
fscanf(pf,"%d",&i);
LECTURE D'UN CERTAIN NOMBRE DE CARACTERES
fgets(buffer,taille,pointeur de fichier);
FONCTIONS DE MANIPULATION DE CHAINES
dans <string.h>
===============
strlen(chaine) = donne la longueur d'une chaine
ex:strcpoy(ville,"boulogne")
strcpy(chaine1,chaine2) = copie la chaine2 dans la chaine1
strcap(chaine1,chaine2) = ajoute chaine2 à la fin de la chaine1
strcmp(chaine1, chaine2) = comparaison de chaines , retourne un entier
rep :
negatif : chaine1<chaine2
nul : chaine1 = chaine2
positif : chaine1 > chaine2
dans <ctype.h> :
==============
isupper(char) : retourne un entier différent de 0 si caractère majuscule
islower(char) : retourne un entier différent de 0 si caractère minuscule
isdigit(char) : retourne un entier différent de 0 si caractère numétrique (chiffre)
isalpha(char) : retourne un entier différent de 0 si caractère lettre
isalnum(char) : retourne un entier différent de 0 si caractère alpha-numétrique (chiffre ou lettre)
isxdigit(char) : retourne un entier différent de 0 si caractère hexadecimal (0-9 A-E)
isspace(char) : retourne un entier différent de 0 si caractère espace
tolower(char) : de majuscule à minuscule
toupper(char) : de minuscule à majuscule
dans <stdlib.h> :
================
(relatif à des chaines composées de chiffres)
atoi(chaine) : retourne la valeur numérique corespondante (alphanumerique to integer)
atol(chaine) : retourne la valeur numérique corespondante (alphanumerique to long)
atof(chaine) : retourne la valeur numérique corespondante (alphanumerique to float)
*/
#include <stdafx.h>
#include <stdio.h>
#include <string.h> // fonctions de manipulations de chaines de caractères
#include <ctype.h> // fonctions de manipulations de chaines de caractères
#include <stdlib.h> // fonctions de manipulations de chaines de caractères
// ***************
// ** exercice 1 *
// ***************
void exercice1 ()
{
int fgetc (FILE *demo);
int fputc (int c,FILE *demo);
FILE *demo; /* variable flot */
int i;
printf("ouverture du fichier .txt\n");
/* Ouverture du fichier en lecture */
if ((demo = fopen("fichier.TXT","w+")) == NULL)
printf("ERREUR d'ouverture du fichier .txt\n");
for (i=65;i<62+29;i++){
fputc ((unsigned char)i,demo);
printf("%c",(unsigned char)i);
}
if (fclose (demo) ==EOF)
printf("ERREUR de fermeture du fichier .txt \n");
}
// ***************
// ** exercice 2 *
// ***************
void exercice2()
{
FILE *pfin;
char fichnom[20];
char tampon[20];
printf("\nDonnez le nom du fichier :");
scanf("%s",fichnom); // le nom d'un tableau contient son adresse : donc pas de &
pfin=fopen(fichnom,"r");
if (pfin==NULL)
{
printf("\nfichier %s non trouve",fichnom);
}
else
while (!feof(pfin))
{
fscanf(pfin,"%s",tampon); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
printf("\nmot courant :%s",tampon);
};
};
// ***************
// ** exercice 3 multiplication *
// ***************
void exercice3()
{
FILE *pfin;
char fichnom[20];
int i=0,j=1;
printf("\nDonnez le nom du fichier :");
scanf("%s",fichnom); // le nom d'un tableau contient son adresse : donc pas de &
pfin=fopen(fichnom,"w");
printf("\nDonnez la valeur de i :");
scanf("%i",&i);
//for (i++)
{for (j=1;j<=20;j++)
fprintf(pfin,"\n%i X %i = %i",i,j,(i *j));
fprintf(pfin,"\n============");
};
};
// ***************
// ** exercice 4 ** "matching"
// ***************
void exercice4()
{
FILE *pfin1, *pfin2, *pfout;
char fichin1[20],fichin2[20],fichout[20];
char tampon1[20],tampon2[20];
// ** Ouverture du premier fichier *
printf("\nDonnez le nom du fichier entree 1:");
scanf("%s",fichin1); // le nom d'un tableau contient son adresse : donc pas de &
pfin1=fopen(fichin1,"r");
if (pfin1==NULL) { printf("\nfichier %s non trouve",fichin1);}
// ** Ouverture du second fichier *
printf("\nDonnez le nom du fichier entree 2:");
scanf("%s",fichin2); // le nom d'un tableau contient son adresse : donc pas de &
pfin2=fopen(fichin2,"r");
if (pfin2==NULL) { printf("\nfichier %s non trouve",fichin2);}
// ** Ouverture du fichier de sortie en ecriture *
printf("\nDonnez le nom du fichier sortie:");
scanf("%s",fichout); // le nom d'un tableau contient son adresse : donc pas de &
pfout=fopen(fichout,"w");
if (pfout==NULL) { printf("\nfichier %s non trouve",fichout);}
// ** lecture des fichiers *
fscanf(pfin1,"%s",tampon1);
fscanf(pfin2,"%s",tampon2);
while ( ( !feof(pfin1) ) || ( !feof(pfin2) ) ) // tant qu'on n'est pas eof1 et eof2 on traite
{
if (((strcmp(tampon1,tampon2)<0)&&(!feof(pfin1)))||(feof(pfin2))) // (1<2 et pas fin de fichier 1) ou (fin de fichier2)
{
printf("\n1<2");
printf("\nmot courant :%s",tampon1); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
fscanf(pfin1,"%s",tampon1);
}
else
if (((strcmp(tampon1,tampon2)>0)&&(!feof(pfin2)))||(feof(pfin1))) // (1>2 et pas fin de fichier 2) ou (fin de fichier1)
{
printf("\n1>2");
printf("\nmot courant :%s",tampon2);
fscanf(pfin2,"%s",tampon2); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
}
else
{ // 1=2
printf("\n1=2");
printf("\nmot courant :%s",tampon1); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
fscanf(pfin1,"%s",tampon1);
printf("\nmot courant :%s",tampon2);
fscanf(pfin2,"%s",tampon2); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
};
}; // fin while
fclose(pfin1);
fclose(pfin2);
fclose(pfout);
};
// ***************
// ** exercice 5 *
// ***************
FILE *ouvrirfichier(char mode[1])
{
FILE *pf;
char fich[20];
printf("\nDonnez le nom du fichier :");
scanf("%s",fich); // le nom d'un tableau contient son adresse : donc pas de &
pf=fopen(fich,mode);
if (pf==NULL) { printf("\nfichier %s non trouve",fich);}
return pf;
};
void exercice5()
{
FILE *pfin1, *pfin2, *pfout;
char fichin1[20],fichin2[20],fichout[20];
char tampon1[20],tampon2[20];
// ** Ouverture du premier fichier *
/* printf("\nDonnez le nom du fichier entree 1:");
scanf("%s",fichin1); / le nom d'un tableau contient son adresse : donc pas de &
pfin1=fopen(fichin1,"r");
if (pfin1==NULL) { printf("\nfichier %s non trouve",fichin1);}
*/
pfin1=ouvrirfichier("r");
// ** Ouverture du second fichier *
/* printf("\nDonnez le nom du fichier entree 2:");
scanf("%s",fichin2); / le nom d'un tableau contient son adresse : donc pas de &
pfin2=fopen(fichin2,"r");
if (pfin2==NULL) { printf("\nfichier %s non trouve",fichin2);}
*/
pfin2=ouvrirfichier("r");
// ** Ouverture du fichier de sortie en ecriture *
/* printf("\nDonnez le nom du fichier sortie:");
scanf("%s",fichout); / le nom d'un tableau contient son adresse : donc pas de &
pfout=fopen(fichout,"w");
if (pfout==NULL) { printf("\nfichier %s non trouve",fichout);}
*/
pfout=ouvrirfichier("w");
// ** lecture des fichiers *
fscanf(pfin1,"%s",tampon1);
fscanf(pfin2,"%s",tampon2);
while ( ( !feof(pfin1) ) || ( !feof(pfin2) ) ) // tant qu'on n'est pas eof1 et eof2 on traite
{
if (!feof(pfin1)) // pas fin de fichier 1
{
fprintf(pfout,"\nmot courant :%s",tampon1);
fscanf(pfin1,"%s",tampon1);
};
if (!feof(pfin2)) // pas fin de fichier 2
{
fprintf(pfout,"\nmot courant :%s",tampon2);
fscanf(pfin2,"%s",tampon2); // lit chaine par chaine : l'espace,la tabulation sont considérés comme séparateur
};
}; // fin while
fclose(pfin1);
fclose(pfin2);
fclose(pfout);
};
// *************************
// ** PROGRAMME D EXECUTION *
// *************************
void main()
{
int choix=0;
printf("\nDebut programme");
printf("\nQuel exercice ?");
scanf("%i",&choix);
switch(choix)
{
case 1 : exercice1();break;
case 2 : exercice2();break;
case 3 : exercice3();break;
case 4 : exercice4();break;
case 5 : exercice5();break;
default:printf(" *** option non programmée ***");
};
printf("\nFin programme\n");
}