Compactador Simples

Publicado por Ricardo Rodrigues Lucca 27/02/2004

[ Hits: 16.721 ]

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

Manipulando árvores.

Cálculo de Fatorial usando Loop

Calculadora

Cálculo do dia da semana

Contagem de elementos de um array


  

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