ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Huffman encoding/decoding   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
18/20
1 vote


Contributions > 01 - PRG : Programmation > Crypto - Hash - Compression

Huffman encoding/decoding
# 0000000382
ajouté le 18/12/2006 17:07:27 et modifié le 19/12/2006
consulté 6622 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0


Le téléchargement des pièces jointes est limité aux membres
Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description

Classe qui permet d'encoder/decoder selon le principe de Huffman

Sources

Teste - raisonnablement - sous vfpsp6.

Devrait marcher sous vfp9 utilisant les bintoc( , 'S') et ctobin( , 'S').  A recompiler et a tester 

Code optimise

 Encoder

  • lire le fichier pour obtenir des statistiques
  • construction d'un arbre
  • ecrire l'entete dans le fichier de destination
  • lire le fichier de nouveau et ecrire les valeurs comprimees

Decoder

  • lire l'entete
  • lire les donnees comprimees en ecrivant la version decomprimee dans le fichier de destination

Bonne chance,

 

 

 

Code source :
#define  TRUE  .T.


set proc to Huffman additive

local Success
Success = TRUE

local obj

&& comprimer

do case
case !m.Success

case !Huffman_Object(@m.obj)
    assert FALSE
    Success = FALSE

case !m.obj.Encode('NomDuFichierSource''NomDuFichierComprime')
    assert FALSE
    Success = FALSE

otherwise
    ? '# bit en moyenne ', obj.Bit_average_length

endcase

&& decomprimer
do case
case !m.Success

case !Huffman_Object(@m.obj)
    assert FALSE
    Success = FALSE

case !m.obj.Decode('NomDuFichierComprime''NomDuFichierDecomprime')
    assert FALSE
    Success = FALSE

endcase


return m.Success

Commentaires
le 18/12/2006, FredA a écrit :
c'est vrai que cette méthode obtient de bons résultats pour des fichiers de type dbf quand les champs caractères sont très souvent plein d'espaces.
a good work.

le 18/12/2006, Gregory Adam a écrit :
Mais, merci Fred.

Je vois que zlib l'emporte en ce qui concerne vitesse et compression
Le but etait plutot 'academique'

le 20/12/2006, FoxInCloud (Th. Nivelet) a écrit :
J'aime bien l'algorithme avec un case pour chaque étape
Plus simple et lisible que les IF ELSE ENDIF !

le 20/12/2006, Gregory Adam a écrit :
C'est vrai que c'est plus lisible avec des CASE. Plus facile a maintenir aussi.

Je laisse toujours les ASSERT FALSE dedans.
Quand je fais des tests, des qu'il y a un truc qui n'est pas prevu ou qui ne marche pas dans une fonction, cela s'arrete la ou il le faut


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2020.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3