Ir para conteúdo
Fórum Script Brasil
  • 0

Manipulando Chars/arquivos?


Heldinho

Pergunta

Olá povo! Desta vez estou com um aduvida meio complicada laugh.gif.. já faz tempo que eu venho tentando criptografar arquivos de um modo com que ele fique menor (compactar).. eu cheguei a conclusao de que contar os bytes seguidos repetidos e colocar no arquivo separado por [caractere especial][numero][caractere a repetir numero vezes] daria certo mas não é muito funcional..dá pra quebrar o galho por enquanto laugh.gif.. Por exemplo, vamos usar "t" como caractere especial..

tocompact.txt:

ebbbbbbbaaaaaaaadsadasfllllllllllffffffddddddgggggggggggggppppppklsdflaksjhkkkkk
Digamos que eu já tenha concluido o programa, e após passa-lo no tocompact.txt, ele tenha que gerar um outro com o seguinte conteudo:
et7bt8adsadasft10lt6ft6dt13gt6pklsdflaksjht5k
Bom.. eu já tentei fazer 3 programas e não funcionam.. vejam: prg1.c:
#include <stdio.h>
void main(void){
FILE *arquivo = fopen("tocompact.txt","r");
int i=0;
char buffer[90];
char conteudo[0];
char conteudo2[0];
int var=0;
int var2=0;

while(feof(arquivo) == 0){
fscanf(arquivo,"%c",&conteudo[0]);
printf("%c",conteudo[0]);
}
fclose(arquivo);
arquivo = fopen("tocompact.txt","r");

while(feof(arquivo) == 0){
buffer[0] == conteudo[0];
fscanf(arquivo,"%c",&conteudo[0]);
if(conteudo[0] == buffer[0]){
i++;
}
else if(conteudo[0] != buffer[0]){
printf("f%d%c",i,buffer[0]);
i=0;
}

}

}
prg2.c:
#include <stdio.h>
int main(void){
	FILE *arquivo = fopen("tocompact.txt","rb");
	FILE *arquivo2 = fopen("tocompact.txt","rb");
	int i=0;
	char conteudo[0];
	char buffer[0];
	char conteudo2[100];
	char buffer2[100];

i=0;
  while(feof(arquivo) == 0){
//printf("%c",conteudo[0]);
if(conteudo2[0] != NULL){
sprintf(buffer2,"%s",conteudo2);
}
  fscanf(arquivo,"%c",&conteudo[0]);
//printf("oi");

//printf(" - %c",buffer[0]);
sprintf(conteudo2,"%s",conteudo);  
printf("    -  %c  -  %c\n",buffer2[0],conteudo2[0]);


                if(conteudo2[0] == buffer2[0]){
  	i++;
//printf("%c - %c\n",conteudo2[0],buffer2[0]);
  }
else if(conteudo2[0] != buffer2[0]){
printf("f%d%c",i,buffer2[0]);
i=0;
}






/*
  	else{
    if(i>0){
    	
    	printf("f%c%d",conteudo2[0],i);
    }
    	else{
      printf("%c%c",conteudo2[0],buffer2[0]);
    	}

if(i>0){
i=0;
}

  	}
*/




  }
return 0;
}
nota: Desculpe os comentários neste arquivo.. não estou com cabeça nem para apaga-los blink.gif prg3.c:
#include <stdio.h>
void main(void){
FILE *arquivo = fopen("tocompact.txt","r");
char buffer[0];
char buffer2[0];
int i=0;

while(feof(arquivo) == 0){
fscanf(arquivo,"%c",&buffer[0]);
sprintf(buffer2,"%c",buffer[0]);
fscanf(arquivo,"%c",&buffer[0]);
if(buffer[0] == buffer2[0]){
i++;
}
else {
printf("t%d%c",i,buffer2[0]);
i=0;
sprintf(buffer2,"%c",buffer[0]);
}

}
}

Na verdade eu usarei isto para um compactador de arquivos que estou fazendo para meu OS.. ele já funciona, agrupa os arquivos direitin.. só falta compactar tongue.gif

Será que alguém consegue me ajudar?

Obrigado, e até mais wink.gif

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Por que você não procura algo sobre o algoritmo Huffman de compactação? É o mesmo algoritmo usado pela maioria dos compactadores (zip, arj, lha, etc.). Acho que seria mais prático (e mais eficiente), já que você deve encontrar bibliotecas (libs) para isso.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Graymalkin, eu já fiz algo parecido com Zlib antes, mas eu gostaria de criar meu próprio formato =) de qualquer forma obrigado, até mais! laugh.gif

Editado:Ah! Estou pesquizando mais sobre Huffman, talvez apartir dele eu possa criar uma forma melhor(não que huffman, melhor que a minha tongue.gif ) biggrin.gif obrigado dinovo!!

Editado2: Huffman fica pra proxima versao? AUHAUHAUHAUHUAH achei meio complicado blink.gif e eu não gostaria de usar uma lib para compactar.. Até mais dinovo =P

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...