[DRAFT] Read header of the file
This commit is contained in:
parent
b87dc29000
commit
800f2e4c56
2 changed files with 34 additions and 10 deletions
35
arbre.c
35
arbre.c
|
@ -89,7 +89,7 @@ Entete *fichierVersListe(FILE *fichier, int *nombreLettresDansFichier, int *tail
|
||||||
|
|
||||||
void compression(FILE *entree, FILE *sortie) {
|
void compression(FILE *entree, FILE *sortie) {
|
||||||
int nombreLettresDansFichier; // initialisé par `listeVersArbre`
|
int nombreLettresDansFichier; // initialisé par `listeVersArbre`
|
||||||
int tailleTotale = 0; // taille totale en en bit du fichier en sortie
|
int tailleTotale = 0; // taille totale en bit du fichier en sortie
|
||||||
Entete *enteteListe = fichierVersListe(entree, &nombreLettresDansFichier, &tailleTotale);
|
Entete *enteteListe = fichierVersListe(entree, &nombreLettresDansFichier, &tailleTotale);
|
||||||
|
|
||||||
// On écrit l'entête du fichier avec la table complète des correspondances
|
// On écrit l'entête du fichier avec la table complète des correspondances
|
||||||
|
@ -156,18 +156,39 @@ Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDan
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Arbre lectureDonnes(FILE *fichier) {
|
Arbre lectureDonnees(FILE *fichier, int *tailleTotale) {
|
||||||
// TODO
|
int nombreLettresDansFichier;
|
||||||
|
fread(nombreLettresDansFichier, sizeof(int), 1, fichier);
|
||||||
|
fread(tailleTotale, sizeof(int), 1, fichier);
|
||||||
|
|
||||||
|
Entete *entete;
|
||||||
|
if ((entete = (Entete*)malloc(nombreLettresDansFichier * sizeof(Entete))) == NULL) { // on alloue de la mémoire pour l'entête
|
||||||
|
printf("Impossible d'allouer de la mémoire supplémentaire (lectureDonnees).\n"); // gestion de l'erreur
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void huffmanDepuisFichier(FILE *fichier, Arbre arbre) {
|
Arbre arbre = allouerCellule('\0');
|
||||||
|
for (int i = 0; i < nombreLettresDansFichier; i++) {
|
||||||
|
fread(&(entete[i].lettre), sizeof(char), 1, fichier);
|
||||||
|
fread(&(entete[i].code), sizeof(int), 1, fichier);
|
||||||
|
fread(&(entete[i].longueur), sizeof(int), 1, fichier);
|
||||||
|
|
||||||
|
// ajouter la lettre à l'arbre ici
|
||||||
|
}
|
||||||
|
|
||||||
|
free(entete); // on libère l'entête car on en a plus besoin
|
||||||
|
|
||||||
|
return arbre;
|
||||||
|
}
|
||||||
|
|
||||||
|
void huffmanDepuisFichier(FILE *entree, FILE *sortie, Arbre arbre, int tailleTotale) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompression(FILE *entree, FILE *sortie) {
|
void decompression(FILE *entree, FILE *sortie) {
|
||||||
/* fclose temporaire pour supprimer les warnings */
|
int tailleTotale; // taille totale en bit du fichier en entrée
|
||||||
Arbre arbre = lectureDonnes(entree);
|
Arbre arbre = lectureDonnees(entree, &tailleTotale);
|
||||||
huffmanDepuisFichier(sortie, arbre);
|
huffmanDepuisFichier(entree, sortie, arbre, tailleTotale);
|
||||||
|
|
||||||
freeArbre(arbre); // on libère l'arbre
|
freeArbre(arbre); // on libère l'arbre
|
||||||
}
|
}
|
||||||
|
|
9
arbre.h
9
arbre.h
|
@ -57,10 +57,13 @@ void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nom
|
||||||
// Récupère les infos d'une lettre depuis l'entête.
|
// Récupère les infos d'une lettre depuis l'entête.
|
||||||
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier);
|
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier);
|
||||||
|
|
||||||
// Lis les données d'un fichier .huff et le transforme en Arbre binaire Huffman (struct Arbre).
|
/*
|
||||||
Arbre lectureDonnes(FILE *fichier);
|
Lis les données d'un fichier .huff et le transforme en Arbre binaire Huffman (struct Arbre).
|
||||||
|
Définit aussi la taille du fichier.
|
||||||
|
*/
|
||||||
|
Arbre lectureDonnees(FILE *fichier, int *tailleTotale);
|
||||||
|
|
||||||
// Retranscris l'arbre de Huffman en fichier lisible.
|
// Retranscris l'arbre de Huffman en fichier lisible.
|
||||||
void huffmanDepuisFichier(FILE *fichier, Arbre arbre);
|
void huffmanDepuisFichier(FILE *entree, FILE *sortie, Arbre arbre, int tailleTotale);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Reference in a new issue