Compactador Simples

Publicado por Ricardo Rodrigues Lucca 27/02/2004

[ Hits: 16.606 ]

Homepage: http://aventurasdeumdevop.blogspot.com.br/

Download 1c.c




Estes programa serve para compactar um arquivo usando uma tecnica arcaica chamada run-length que compacta no maximo 255 caracteres num unico byte. Claro o programa esta mais flexivel(veja a tecnica na pagina onde me basiei), pois permite compactar qualquer arquivo já que não fica dependente de um caracter dito especial. Fora isso, ele pode demorar um bocado se o arquivo for muito grande e não tem um "salva-guarda" pra impedir que o arquivo fique maior.

  



Esconder código-fonte

/*
   Escrito Por Ricardo Rodrigues Lucca

   Este programa compacta um arquivo usando a seguinte forma:
      - Conta-se os caracteres repetidos em sequencia
      - Escreve os caracteres

   Ex.: 
   Arquivo Original : 97 97 97 97 97 100 100 2 2 2
   Arquivo Comprimido: 97 97 3 100 100 0 2 2 1

   OBS: Quando o numero chega a 256 caracteres em sequencia é forçada uma escrita ja que não dá pra ter um valor maior de 255 em 1 byte.

   OBS2: O arquivo esta bem simples acredito que ninguem vai ter problemas de entendimento. Qualquer coisa email-me. 

        OBS3: Baseado no site http://www.ulbra.tche.br/~danielnm/ed/E/polE.html
      
*/
#include <stdio.h>

FILE *arq;

void testa(void)
{
   char s[255];
   printf("Digite o nome do arquivo: ");
   scanf(" %s", s);

   arq = fopen(s,"r");
   if (arq==NULL) {
      printf("Arquivo nao existe!\n");
      testa();
   }   
}

void compacta(void)
{
   int p, n, r, check=0;
   FILE *s;

   s = fopen("saida","w");
   r = 0;
   n = fgetc(arq);

   while (!feof(arq)) {
      p = n;
      n = fgetc(arq);
      if (check==1) {
         check = 0;
         continue;
      }
      
      if (p==n) {
         r++;
         if (r==256) {
            fputc(p,s);
            fputc(p,s);
            fputc(r-1,s);
            r = 0;
            check = 1;
         }
      }
      else {
         fputc(p,s);
         if (r>0) {
            fputc(p,s);
            fputc(r-1,s);
         }
         r=0;
      }
   }   

   fclose(s);
}

int main(void)
{
   testa();
   compacta();

   fclose(arq);
   return 0;
}

Scripts recomendados

Calculo do número de Euler em C++

Um algoritmo genético para o TSP (Travel Salesman Problem)

Agenda em C

Um joguinho em C

Vários pacotes de ping disparados contra o host


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts