Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~


VB Compress

vbcomp.exe (le programme en VB6 natif) ~  vbcomp.zip (les sources du programme)

Si VB 6.0 n'est pas installé sur votre ordinateur, vous aurez peut-être besoin d'installer les Runtimes VB : DLL VB 6.0 DLL VB 6.0
Les deux DLL suivantes sont, en général, également nécessaires : VB6FR.DLL VB6FR.DLL ~  MSCOMCTL.OCX MSCOMCTL.OCX
(pour NT/2000, à copier dans WINNT\SYSTEM32 - pour 95/98/XP, à copier dans WINDOWS\SYSTEM)

Le programme est constitué d'une feuille et d'un module.

La feuille a cet aspect là :

  • 4 zones de textes : une pour le fichier source (à compresser, ou décompresser), une autre pour le fichier résultat.
    Une pour indiquer la taille des "mots" pour la compression, une autre pour donner la taille du dictionnaire de compression.
  • 3 boutons : 1 pour remplir la zone du fichier source, 1 pour lancer la (dé)compression, l'autre pour quitter l'application.
  • 2 boutons à option, pour choisir entre une compression et une décompression.
  • 4 labels (non visible sur l'image) montrent divers états d'avancement et de contrôle.
Photo d'écran de VB Compression

Attention, avant d'aller plus loin, je tiens à signaler que ce programme, même s'il semble fonctionner correctement, présente encore quelques problèmes en fin de fichier. Il rajoute des "blancs" sur le fichier résultat de la décompression. Cela ne doit pas porter à conséquence sur des fichiers textes, ou même des fichiers sources VB. Par contre, il est fortement déconseillé, dans l'état actuel de l'application, de s'en servir pour des programmes exécutables ou binaires quelconques.

Ceci étant dit, je ne m'attarderais pas non plus énormément sur la description du programme. Il est (à part les deux procédures de compression et décompression) assez simple à comprendre. Comme je suis pas vache non plus, je vous donne l'adresse sur laquelle j'ai pris l'algo pour la compression LZW... (là... quelques recherches...) Ben, c'est bête à dire, mais j'avais une super adresse et je la retrouve plus. Si quelqu'un connait le site de Docteur Yes qu'il me fasse signe, car c'est de là que tout est parti. Sinon, voici deux autres sites qui peuvent vous aider en attendant : ici et .

Le but ici n'était pas réellement de faire un concurrent aux programmes de compression existants (la lenteur de VB est ici véritablement à mourir), mais plutôt d'apprendre le fonctionnement de cet algo.
Bien entendu, lorsque j'aurai eu le courage de vraiment bien finir ce programme, je m'en servirai peut-être, mais sur des petits fichiers, ou alors dans un but de cryptage en même temps.
Il serait intérressant de basculer toutes les procédures clés dans une DLL en C++, mais pour ça, on verra également plus tard.

Si vous procédez vous même à quelques optimisations, essayez de me tenir au courant... Voici les résultats que j'obtiens sur un fichier texte de 20Ko environ avec un BITCHAR à 8 et un BITIND à 14 :
Fichier compressé : taille 13Ko
Durée de compression : environ 3 min.
Durée de décompression : environ 40 sec.

BITCHAR et BITIND sont 2 éléments importants de la compression, il peuvent faire varier sensiblement la durée de l'opération et la taille du fichier final. Pour la décompression d'un fichier il faut respecter les deux valeurs données pour la compression. Eviter d'essayer de compresser un fichier de plus de 40Ko, vous risquez d'y passer du temps...

Pour ceux qui ont du courage, voici quelques idées de perfectionnement :
- des tests plus poussés sur les données saisies,
- enregistrement du BITCHAR et du BITIND dans le fichier compressé (comme ça on le demande pas),
- mettre au point une taille de dictionnaire variable (c'est ce qui est fait semble-t-il pour la compression GIF),
- mise en mémoire plus importante du buffer d'écriture (évite de nombreux accès disque inutiles),
- correction du bug de fin de fichier (ajout de blancs en trop sur certains fichier),
- adaptations pour compresser tous les types de fichiers, ...

Sur ce, bonne réflexion avec le code suivant...

frmLZW.frm (. Afficher le code)

modLZW.bas (. Afficher le code)

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr