begin process at 2012 05 27 14:46:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Compression & Split

 > COMPRESSION / DECOMPRESSION SELON L'ALGORITHME LEMPELZIV 78V

COMPRESSION / DECOMPRESSION SELON L'ALGORITHME LEMPELZIV 78V


 Information sur la source

Note :
Aucune note
Catégorie :Compression & Split Classé sous :lempel ziv, compression, algorithme, decompression Niveau :Initié Date de création :02/05/2010 Date de mise à jour :06/05/2010 00:04:32 Vu / téléchargé :3 660 / 160

Auteur : th1man

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Salut à vous tous;
Ce programme entièrement écrit en C, permet la compression et la décompression selon l'algorithme LempelZiv78.

Cet algorithme génère son propre dictionnaire au fur et à mesure qu'on avance dans la lecture du fichier source (pour la compression et la décompression).

Le projet contient en tout 7 fichiers, dont:

- Un fichier principal 'main.c', contient la fonction main()
- Deux fichiers 'ListeChaine.c' et 'ListeChaine.h', contiennent des fonctions permettant la définition
et l'utilisation d'une liste chainée
- Deux fichiers 'LempelZiv.c' et 'LempelZiv.h', définit la fonction de compression et celle de la   décompression selon l'algorithme de LempelZiv-v78
- Deux fichiers 'ChaineBit.c' et 'ChaineBit.h', définissent les fonctions pour le traitement, l'écriture et la lecture à partir d'un fichier au niveau des bits


La fonction de compression marche à merveille (son résultat est correcte);
La fonction de décompression marche pour des fichiers de faible taille, mais dés que les fichiers deviennent de grande taille, la fonction donne des résultat incorrect.

Source

  • Voici la fonction de décompression, elle fait appelle à d'autres fonctions du projet:
  • void decompression(char *Src, char *Dest){
  • FILE *fichSrc=fopen(Src,"r");
  • FILE *fichDest=fopen(Dest,"w");
  • liste *tete=NULL,*p;
  • int i=0,nbre,ind;
  • long tailleFich,pf;
  • char car,inter1[200],inter2[200];
  • fseek(fichSrc,0,SEEK_END);
  • tailleFich=ftell(fichSrc);
  • fseek(fichSrc,0,SEEK_SET);
  • while((pf=ftell(fichSrc)) < tailleFich){
  • i++;
  • strcpy(inter1,"");
  • strcpy(inter2,"");
  • nbre=ceil(log(i)/log(2)); // l'indice de la chaine est code sur nbre bits
  • lectBitFich(fichSrc,nbre,&ind,&car);
  • inter1[0]=car;
  • inter1[1]='\0';
  • if(ind!=0){
  • p=getListe(tete,ind-1); //p pointe sur l'element d'indice j
  • strcpy(inter2,p->chaine);
  • strcat(inter2,inter1);
  • strcpy(inter1,inter2);
  • }
  • tete=ajoutListe(tete,ind,inter1);
  • fprintf(fichDest,"%s",inter1);
  • }
  • printf("\n___________________________AFFICHAGE LISTE DECOMPRESSION_______________________\n");
  • afficheListe(tete);
  • printf("\nFichier de taille %ld\n",tailleFich);
  • printf("\nListe de Decompression de taille %d\n",tailleListe(tete));
  • tete=supprimeListe(tete);
  • fclose(fichSrc);
  • fclose(fichDest);
  • }
Voici la fonction de décompression, elle fait appelle à d'autres fonctions du projet: 

void decompression(char *Src, char *Dest){
    FILE *fichSrc=fopen(Src,"r");
    FILE *fichDest=fopen(Dest,"w");
    liste *tete=NULL,*p;
    int i=0,nbre,ind;
    long tailleFich,pf;
    char car,inter1[200],inter2[200];

    fseek(fichSrc,0,SEEK_END);
    tailleFich=ftell(fichSrc);
    fseek(fichSrc,0,SEEK_SET);

    while((pf=ftell(fichSrc)) < tailleFich){
        i++;
        strcpy(inter1,"");
        strcpy(inter2,"");
        nbre=ceil(log(i)/log(2));	        // l'indice de la chaine est code sur nbre bits

        lectBitFich(fichSrc,nbre,&ind,&car);

        inter1[0]=car;
        inter1[1]='\0';

        if(ind!=0){
            p=getListe(tete,ind-1);          //p pointe sur l'element d'indice j
            strcpy(inter2,p->chaine);
            strcat(inter2,inter1);
            strcpy(inter1,inter2);
        }

        tete=ajoutListe(tete,ind,inter1);
        fprintf(fichDest,"%s",inter1);
    }

    printf("\n___________________________AFFICHAGE LISTE DECOMPRESSION_______________________\n");
    afficheListe(tete);
    printf("\nFichier de taille %ld\n",tailleFich);
    printf("\nListe de Decompression de taille %d\n",tailleListe(tete));

    tete=supprimeListe(tete);

    fclose(fichSrc);
    fclose(fichDest);
}

 Conclusion

Moi, je pense que la fonction bugs lors de l'appel de la fonction "lectBitFich(fichSrc,nbre,&ind,&car)",

Si vous avez une façon meilleure pour la lecture bit à bit à partir du fichier, et si vous avez des suggestions n'hésitez pas !!!

Merci d'avance !!!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 mai 2010 00:36:04 :
Juste un petit changement de titre...
05 mai 2010 19:57:04 :
Je suis vraiment désolé !!!!! Le zip n'était pas le bon, désolé ^^
06 mai 2010 00:04:33 :
....

 Sources de la même categorie

Source avec Zip EXTRAIRE UNE IMAGE CODÉE EN B64 D'UNE PAGE.HTM par mjpmjp
Source avec Zip Source .NET (Dotnet) ZIP UNZIP DOSSIER (COMPRENANT FICHIER(S) ET SOUS DOSSIER(S))... par ManuOrange
Source .NET (Dotnet) DÉCOMPRESSER EN .NET PLUSIEURS FORMATS POPULAIRES D'ARCHIVAG... par NikatorS
Source .NET (Dotnet) DÉCODAGE YENC EN VB.NET par NINATECH
Source avec Zip Source avec une capture Source .NET (Dotnet) SEVENZIP CONSOLE par PWM63

 Sources en rapport avec celle ci

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGEN... par Gallien69
Source avec Zip Source avec une capture COMPRESSION FICHIERS ALGORITHME HUFFMAN C par xtremejames183
Source avec Zip WIN32CAB .CAB par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture COMPRESSION HUFFMAN ( INTERFACE EN API WINDOWS ) par deimoslp

Commentaires et avis

Commentaire de bothan le 03/05/2010 13:41:35

Bonjour th1man

J'aimerai bien tester la decompression si c'est possible

Mais comment tester ta methode lectBitFich(fichSrc,nbre,&ind,&car) appelée dans decompression et savoir pourquoi elle pose probleme?

car je ne la trouve pas dans les fichiers sources de ton projet.

Salutations

Commentaire de th1man le 03/05/2010 21:22:16

Salut à vous BOTHAN,

La fonction "lectBitFich(fichSrc,nbre,&ind,&car)" tu la trouve déclarer dans le fichier "ChaineBit.h" et définie dans "ChaineBit.c"............

MOI, ce que je constate, aprés plusieus tests, que la fonction lectBitFich bloque dés qu'elle lit un indice codé sur 8 bits ( c'est à dire juste à partir de l'ajout de l'élément 128 de la liste), et que la valeur de celui çi est égual à 0 ( codé sur 8 bits -> "00000000" )

J'ai une question, comment lire un fichier word en C ?   Je veut dire le parcourir en entier.

______________Merci

Commentaire de th1man le 03/05/2010 21:24:38

mdr.............
En tapant cette phrase "Je veut dire le parcourir en entier", je voulait dire parcourir le fichier word caractere par caractere jusqu'à sa fin. ^^

Commentaire de bothan le 03/05/2010 23:05:17

Bonsoir

Peut être le fichier ChaineBit.h et ChaineBit.c sur le serveur ne sont pas identiques aux tiens mais je n'ai pas la methode en question:

pour le header pas de lectBit Fich(fichSrc,nbre,&ind,&car):

#ifndef _CHAINEBIT_H_
#define _CHAINEBIT_H_

void bitChar(char,int[]);               //  char        -> boolean[8]
char charBit(int[]);                    //  boolean[8]  -> char
void ecrireFich(FILE*,int,int,char);    //  l'ecriture dans le fichier l'indice, la taille de l'indice en binaire
                                        //  \__ainsi que la chaine;
void ecrtBitFich(FILE*,int);            //  l'ecriture dans un fichier bit par bit
                                        //  \__le passage par ce module est obligatoire

#endif

et dans la source ChaineBit.c non plus

Pour une lecture complete caractere par caractere d'un fichier texte je peux proposer ceci:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        FILE *F;
        int c;
        if(NULL==(F=fopen("file.txt","r")))
                return EXIT_FAILURE;
        while((c=fgetc(F))!=EOF && c!='\n')
                printf("%c\n",c);
        return EXIT_SUCCESS;
}

mais ne vaudrait il mieux pas travailler en binaire sur les fichiers?

A+

Commentaire de bothan le 04/05/2010 00:28:49

le c!='\n' est de trop bien sur

Commentaire de th1man le 05/05/2010 20:01:56

Salut,
Merci à toi BOTHAN pour me l'avoir fait découvrir;
Effectivement, la fonction lectBitFich ne se trouvait pas dans le zip (le ZIP n'était pas le bon).
Je m'en excuse !!!!!!!!!!!!  

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Algorithme de compression [ par nebneb37 ] Dans le cadre d'un dossier sur la compression, je suis a la recherche des noms des algorithmes de base des formats ZIP, RAR, ACE ... est qu'il s'agit Algorithme de compression STAR amélioré [ par hi_vivie2 ] Bonjour à tous,Je dois réaliser de manière urgente l'implémentation en java de l'algorithme de compression STAR amélioré appliqué aux images en mouvem Algorithme de compression STAR amélioré [ par hi_vivie2 ] Bonjour à tous,Je dois réaliser de manière urgente l'implémentation en java de l'algorithme de compression STAR amélioré appliqué aux images en mouvem algorithme de huffman( compression) [ par flamme19 ] sa[size=200]lut, je cherche un programme en c++ qui fait la compression, puis la décompression d'un texte donné en utilisant l'algorithme de huffman.. Compression de fichier bianire [ par VinceExtense ] Je connais quelques algorithme de compression sans perte comme le codage huffman, le RLE ou avec dictionnaire.Mais il y a t'il d'autres types d'algori Compression avec huffman sous SCILAB si possible Decompression aussi [ par Doser ] Besoin d'aide j suis un peu coincé compression et décompression un fichier texte selon l'algorithme de HUFFMAN [ par sarasofia ] [b]salut tout le monde s'il vous plaît[^^sad1] j ai besoin d'un programme de compression texte selon l algorithme de Huffman en C,C++, Matlab s'il vou algorithme de compression de fichier avec zlib [ par mayssakh84 ] bonjour, j'ai un programme qui utilise les méthodes deflate() et inflate() de la librairie zlib pour la compression des fichiers mon probleme c'est q compression et decompression d'un fichier [ par asma ] salut tt le monde , vous pouvez me filer un coup de main les gars ?? je veux une astuce pour compresser et decompresser un fichier (EN C++ evidemment compression et c++ [ par fakbill ] A l'adresse http://www.cjkware.com/wamckee/huffman.zip j'ai touvé une implémentation en c++ de l'algo de huffman.Pb: Je ne cromprends rien à la façon


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales