1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| FILE *pf;
/*----------------------------- Ouverture du ficher ----------------------------------------*/
int ouvrir_fichier()
{
char nom_fichier[100];
/* demander le nom du fichier a ouvrir */
printf("\n Donnez le nom du fichier a ouvrir : ");
scanf("%s",&nom_fichier);
printf("\n fichier a ouvrir -> %s",nom_fichier);
/* tente d'ouvrir le fichier et afficher un message d'erreur si erreur a l'ouverture */
pf = fopen(nom_fichier, "r");
if (pf==NULL) { printf("\n *** erreur ouverture du fichier %s ***\n", nom_fichier); return 0; }
else { printf("\n ok, fichier %s ouvert \n",nom_fichier); return 1; };
}
/*----------------------------- Decoupage de la ligne -------------------------------------*/
Maillon * DecoupeLigne(char *ligne, int Tailleligne, int nbAjout, Maillon *MaChaine, int Numligne)
{
int j=0,x=0,Indice=0;
char *mot=NULL; /*pointeur sur le tableau contenant un mot */
mot = malloc (sizeof(char)); /* creation du tableau dynamique pour le mot */
if( mot == NULL )
{
fprintf(stderr,"Allocation impossible");
exit(EXIT_FAILURE);
}
/*Pourquoi passer Tailleligne ?? pkoi pas strln(ligne) ?? je crois que ca bogue...a verifier qd meme*/
/* parcours de la ligne */
for (j=0 ; j<=Tailleligne ; j++) {
if(isspace(ligne[j]) || ispunct(ligne[j]))
{ /*si espace OU ponctuation */
if(nbAjout==0) {
MaChaine = inserer_debut(mot, Numligne); /*Si premier ajout on sauvegarde le mot en tete */
nbAjout=100;
}
else {
MaChaine=inserer_fin(MaChaine, mot, Numligne);
} /* Sinon on sauvegarde le mot en queue */
free(mot); /* on libere le pointeur */
mot=NULL;
mot=calloc ( 1 , sizeof(char) );
//mot = malloc (sizeof(char)); /* creation de mot */
if( mot == NULL )
{
fprintf(stderr,"Allocation impossible");
exit(EXIT_FAILURE);
}
x=0; /* et c'est reparti pour un nouveau mot !! */
mot[x] = '\0';
}
else {
mot[x]=ligne[j]; /* recuperation du caractère */
mot = realloc (mot, (x+1)*(sizeof(char))); /* Ajout d'un element au tableau */
x++; /* et on reboucle */
mot[x] = '\0';
}
}
return (MaChaine);
}
/*----------------------------- Lecture Fichier --------------------------------------*/
Maillon * Lecture_Fic(Maillon *MaChaine)
{
char car[2]={0}; /* chaine de char contenant une lettre + caractere fin de chaine soit 2 emplacements a reserver */
char * ligne; /* pointeur sur ligne */
int i=0, Tailleligne=0, Numligne=1, j=0, nbAjout=0;
ligne = malloc (sizeof(char)); /* creation de ligne */
if( ligne == NULL )
{
fprintf(stderr,"Allocation impossible");
exit(EXIT_FAILURE);
}
while (!feof(pf))
{ /* remplir ligne pour qu'il contienne la ligne lue. */
fgets(car, sizeof car, pf); /* lecture dans le fichier */
if(car[0]!='\n') /* si pas newligne (dc pas fin de ligne) */
{
ligne[i]=car[0];
ligne = realloc (ligne, (i+1) *(sizeof(char)) ); /* Ajout d'un element */
i++;
//ligne[i]='\0';
}
else {
Tailleligne=i;
//Numligne=1;
MaChaine = DecoupeLigne(ligne, Tailleligne, nbAjout, MaChaine, Numligne); /* on decoupe la ligne */
nbAjout=100;
free(ligne); /* on libère ligne */
ligne=NULL;
ligne=calloc ( 1 , sizeof(char) );
if( ligne == NULL )
{
fprintf(stderr,"Allocation impossible");
exit(EXIT_FAILURE);
}
i=0; /* et hop ! encore un tour... */
ligne[i]='\0';
Numligne++;
}
}
return (MaChaine);
}
/*----------------------------- Fermeture du ficher ----------------------------------------*/
void fermer_fichier()
{
fclose(pf);
}
/*----------------------------- Gestion Fichier ---------------------------------------*/
Maillon * GestionFic(Maillon *MaChaine)
{
int i = 3;
i = ouvrir_fichier();
if(i==1) {MaChaine= Lecture_Fic(MaChaine);
fermer_fichier(); }
return (MaChaine);
} |
Partager