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
| #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "dico.h"
/**
* Retourne un pointeur sur le fichier
**/
FILE *open_file(const char* fic, const char* mode)
{
return fopen(fic, mode);
}
/**
* Renvoie le nombre de ligne du fichier
**/
int nombre_lignes(FILE *fichier)
{
int nb_lignes = 0;
int c;
do{
c = fgetc(fichier);
if (c == '\n')
nb_lignes++;
}while (c != EOF);
rewind(fichier);
return nb_lignes;
}
/**
* Compare 2 chaînes de caractère
**/
int compareString(const void* str1, const void* str2)
{
// renvoie 0 si chaîne identique
// renvoie un nombre positif si les caractères de la chaîne 1 sont supérieur à ceux de la chaîne 2
// renvoie un nombre négatif sinonn
char *a = *(char**)str1, *b = *(char**)str2;
return strcmp(a,b);
}
/**
* Chargement du fichier en mémoire
**/
char** alloc_fichier_tab(FILE *fichier, int nb_lignes)
{
char** pTableau_char; // Tableau de pointeur sur tableau de char
int i;
// Allocation mémoire du fichier
if(nb_lignes > 0)
{
pTableau_char = malloc(nb_lignes * sizeof(char *));
if(pTableau_char == NULL)
puts("Echec");
else
{
// Allocation mémoire des lignes du fichiers
for(i=0;i<nb_lignes;i++)
{
pTableau_char[i] = malloc(LENGTH_MOT_MAX * sizeof(char));
if(pTableau_char[i] == NULL)
puts("Echec");
}
}
}
return pTableau_char;
}
/**
* Copie du fichier en mémoire
**/
char** charger_fichier(char** pTableau, FILE* fichier)
{
char buffer[LENGTH_MOT_MAX];
int i = 0;
for(i=0; fgets(buffer, LENGTH_MOT_MAX, fichier) != NULL; i++)
strcpy(pTableau[i], buffer);
// Retour au début du fichier
rewind(fichier);
return pTableau;
}
/**
* On trie le fichier en mémoire
**/
char** fichier_trier(char** pTableau, FILE* fichier, int nb_lignes)
{
qsort(pTableau, nb_lignes, sizeof(*pTableau), compareString);
return pTableau;
}
/**
* On affiche le fichier trié
**/
void afficher_tab(char** pTableau, int nb_lignes)
{
int i = 0;
for(i=0;i<nb_lignes;i++)
printf("%s", pTableau[i]);
}
/**
* On libère la mémoire
**/
void free_fichier_tab(char** pTableau, int nb_lignes)
{
int i = 0;
for(i=0;i<nb_lignes;i++)
{
free(pTableau[i]);
}
free(pTableau);
} |