Notícias:

SMF - Just Installed!

Menu principal

Conjunto de ferramentas 'arq'

Iniciado por adalberto, Maio 28, 2017, 10:40:14 PM

tópico anterior - próximo tópico

adalberto

Vou criar um conjunto de bibliotecas referentes a compressão, empacotamento, descompressão e extração  de arquivos. Já tenho três boas libs, todas vão ficar em uma pasta chamada 'arq'.

As bibliotecas que já tenho desenvolvidas são:

1 - Compressão e extração lzw.pris:  lzw =  inclua'arq.lzw'; Apenas para texto, não é eficiente para mídias como fotos etc.

2 - Gzip - Somente extração: zzlib.pris (extrai arquivos *.gz ):  gz = inclua'arq.zzlib';

3 - Empacotamento e extração de arquivos pac.pris (une arquivos em um só. Por enquanto não tem suporte a pastas mas logo terá.)

Essas libs são feitas em puro código Prisma logo é compatível com qualquer interpretador Prisma.

As duas primeiras foram convertidas de Lua para Prisma. Já a última é autoria minha mesmo.

Baixe o conjunto arq em anexo, (Na próxima versão Prisma esta lib será adicionada como padrão.)

Veja os exemplos abaixo:

Teste com lzw:


local lzw = inclua'arq.lzw';
local dir=inclua'igdir';

ARQ='igpbr.c'; //mude o nome para algum arquivo alvo seu.
pasta,nome,ext=sis.nome_arquivo(ARQ);

local txt = dir.leia_arquivobin(ARQ) ou 'aaaaaaabbbbbbbbbbcccccccccc';

t1 = sis.tempo();
poe'Iniciando, aguarde...';
comp = lzw.comprima(txt);
poe'Compressao terminada';
poe'iniciando descompressão';
dec = lzw.extraia(comp);
poe'Descompressao terminada';

dir.grave_arquivobin(nome .. '.lzw',comp);
dir.grave_arquivobin(nome .. '2.' .. ext, dec);

imprima("Tempo Gasto:", sis.diftempo(sis.tempo(),t1),'segundos');
imprima('Economizados', #dec - #comp,'bytes');

poe'Processo terminado! (ENTER para sair)';
leia();



Teste descompactação *.gz :


local z = inclua'arq.zzlib'
local dir=inclua'igdir'

in = 'igpbr.c.gz'
out = 'z_igpbr.c'
tmp1 = sis.tempo();
poe'Extraindo..';
local ret = z.extrair_arq(in);//retorna string do arquivo descompactado.

poe'Extracao completa'
imprima('Tempo:',sis.diftempo(sis.tempo(),tmp1) );
poe'Gravando arquivo...'
se ret entao
  dir.grave_arquivobin(out,ret);
fim
imprima('Tempo:',sis.diftempo(sis.tempo(),tmp1) );



Teste de empacotamento  pac.pris :

local pac = inclua'arq.pac'; //lib pacote de empacotamento:

local a = pac.abra('zz_teste.pac'); //criando o arquivo de empacotamento

ret, err = a:insira('zz_igpbr.c', 'igpbr.c');//insere o arquivo igpbr.c com nome 'zz_igpbr.c';
se nao ret entao erro(err) fim;


ret, err = a:insira('zz_teste_pac.prisma', 'teste_pac.prisma');
se nao ret entao erro(err) fim;

a:grave(); //gravando os arquivos inseridos acima.
a:feche();//no final fechamos o arquivo;


poe'Lendo o arquivo agora: [ENTER para continuar...]';



//lendo o conteúdo para uma string.
a = pac.abra('zz_teste.pac');
txt,err = a:busque('zz_teste_pac.prisma');//retorna em string:

se txt entao
  poe(txt);
senao
imprima(err);
fim


//extraindo um arquivo:
ret,err = a:extraia('zz_igpbr.c','zzz_igpbr.c');
a:feche();

se nao ret entao imprima(err); sis.saia(1) fim

poe'Arquivo descompactado';


/*
a:extraia();//sem parametros extrai todos:
*/

poe'Processo terminado ENTER para sair...';
leia();