/* 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"); }