{"id":3254,"date":"2019-08-21T17:32:50","date_gmt":"2019-08-21T21:32:50","guid":{"rendered":"http:\/\/linguagemprisma.br4.biz\/blog\/?p=3254"},"modified":"2019-08-21T17:32:50","modified_gmt":"2019-08-21T21:32:50","slug":"pzip-biblioteca-para-arquivos-zip-em-prisma","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/uncategorized\/pzip-biblioteca-para-arquivos-zip-em-prisma\/","title":{"rendered":"pzip &#8211; biblioteca para arquivos *.zip em Prisma"},"content":{"rendered":"<p>ZIP \u00e9 um formato de compress\u00e3o de arquivos muito utilizado e uma ferramenta dessas n\u00e3o deve faltar em uma linguagem de programa\u00e7\u00e3o.<\/p>\n<p>Pzip \u00e9 uma biblioteca Prisma que cumpre tal tarefa, feita em C ela \u00e9 r\u00e1pida e eficiente. Com fun\u00e7\u00f5es b\u00e1sicas \u00e9 poss\u00edvel criar e manipular arquivos zip, inclusive descompact\u00e1-los.<\/p>\n<p><a href=\"http:\/\/www.mediafire.com\/file\/9xlemwpoxl6itr9\/pzip.zip\/file\" target=\"_blank\" rel=\"noopener\">Baixar pzip<\/a> &#8211; (linux &#8211; compilar \/ windows use pzip.dll j\u00e1 compilada);<\/p>\n<p>Exemplo simples:<\/p>\n<pre class=\"lang:default decode:true \">local pz = inclua'pzip'\r\n                 \/\/ nome.zip, nivel:1-6,  modo:escrita,leitura,adicao,e,l,a);\r\nlocal z = pz.abra(\"nome.zip\", pz.NIVEL_COMPRESSAO_PADRAO, \"escrita\");\r\nse nao z entao erro'Erro ao tentar criar arquivo zip'; fim\r\n\r\n  se nao z:abra_item(\"teste\/teste.txt\") entao erro'Erro ao tentar criar item' fim;\r\n  z:escreva(\"ol\u00e1 est\u00e1 \u00e9 uma grava\u00e7\u00e3o de string para o item\\nmais uma linha\");\r\n  z:feche_item();\r\n  \r\n  se nao z:abra_item(\"algo.c\") entao erro'Erro ao tentar criar item' fim;\r\n  z:escreva_arquivo('pzip.c'); \/\/anexa o conte\u00fado de um arquivo.\r\n  z:escreva(\"\\n\/\/---------- outro arquivo ----------------\\n\"); \/\/anexa uma string\r\n  z:escreva_arquivo('compila.sh'); \/\/anexa o conte\u00fado de outro arquivo\r\n  z:feche_item(); \/\/fechando o item sen\u00e3o d\u00e1 erro.\r\n  \r\nz:feche(); \/\/poderia ser pz.feche(z);\r\n\r\n<\/pre>\n<p>Para mais informa\u00e7\u00f5es veja os exemplos e o manual na pasta baixada.<\/p>\n<p>&nbsp;<\/p>\n<p align=\"CENTER\"><span style=\"font-size: large;\"><b>MANUAL DE REFER\u00caNCIA <\/b><\/span><\/p>\n<p align=\"CENTER\"><span style=\"font-size: 300%;\"><b>PZIP-0.4 <\/b><\/span><\/p>\n<p align=\"CENTER\"><b>Biblioteca de cria\u00e7\u00e3o de manipula\u00e7\u00e3o de arquivos zip em Prisma<\/b><\/p>\n<p align=\"CENTER\">Adalberto A. Felipe<\/p>\n<p align=\"CENTER\"><a href=\"mailto:linguagemprisma@gmail.com\">linguagemprisma@gmail.com<\/a><\/p>\n<p align=\"CENTER\"><b>JUN\/2018<\/b><\/p>\n<p align=\"JUSTIFY\"><b>1 \u2013 O que \u00e9?<\/b><\/p>\n<p align=\"JUSTIFY\">Esta \u00e9 um binding da lib minizip em C, que est\u00e1 em dom\u00ednio p\u00fablico.<\/p>\n<p align=\"JUSTIFY\">Com ela voc\u00ea poder\u00e1:<\/p>\n<ul>\n<li>\n<p align=\"JUSTIFY\">criar arquivos *.zip (comprimidos);<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">alter\u00e1-los;<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">ver o conte\u00fado;<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">extrair arquivos *.zip;<\/p>\n<\/li>\n<\/ul>\n<p align=\"JUSTIFY\"><b>2 \u2013 Licen\u00e7a<\/b><\/p>\n<p align=\"JUSTIFY\">A biblioteca pzip n\u00e3o possui licen\u00e7a, voc\u00ea pode us\u00e1-la como bem entender sem nenhum custo ou exig\u00eancia. Se sentir vontade pode citar o autor.<\/p>\n<p align=\"JUSTIFY\"><b>3 \u2013 Como incluir em seu programa Prisma<\/b><\/p>\n<p align=\"JUSTIFY\">Da mesma forma que as demais, use: <b> local pzip = inclua&#8217;pzip&#8217;; <\/b><\/p>\n<p align=\"JUSTIFY\">Certifique-se de baixar e instalar corretamente o arquivo <b>&#8216;pzip.so&#8217;; <\/b>caso n\u00e3o funcione na sua distribui\u00e7\u00e3o use o compila.sh para recompilar e automaticamente ser\u00e1 instalada. (Baixe o arquivo de acordo com a vers\u00e3o Prisma, 1.0 ou 1.1 \u2013 para Windows o arquivo \u00e9 pzip.dll);<\/p>\n<p align=\"JUSTIFY\"><b>4 \u2013 Fun\u00e7\u00f5es pzip dizpon\u00edveis:<\/b><\/p>\n<p align=\"JUSTIFY\"><b>4.0 \u2013 <\/b>Para saber a vers\u00e3o use: <b>imprima(pzip._VERSAO);<\/b><\/p>\n<p align=\"JUSTIFY\"><b>4.1 \u2013 zip = pzip.abra( &#8216;Arq&#8217;, nivel, &#8216;modo&#8217;);<\/b><\/p>\n<p align=\"JUSTIFY\">Abre um arquivo *.zip para leitura ou grava\u00e7\u00e3o (dependo do modo);<\/p>\n<p align=\"JUSTIFY\">Par\u00e2metros:<\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\">&#8216;Arq&#8217; (string) \u2013 Nome do arquivo zip, exemplo: &#8216;bkp.zip&#8217;<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">nivel (n\u00famero) \u2013 N\u00edvel de compress\u00e3o (0 \u2013 9; se for zero n\u00e3o h\u00e1 compress\u00e3o, para comprimir use de 1 a 9, ou pzip.NIVEL_COMPRESSAO_PADRAO = 6);<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">&#8216;modo&#8217; (string) \u2013 modo de abertura (&#8216;escrita&#8217;, &#8216;leitura&#8217;, &#8216;adicao&#8217; = &#8216;e&#8217; , &#8216;l&#8217;, &#8216;a&#8217;);<\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\">Retorno:<\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\">zip (tabela) \u2013 objeto zip com os m\u00e9todos embutidos.<\/p>\n<p align=\"JUSTIFY\">Ou nulo em caso de erro.<\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><b>4.2 &#8211; pzip.feche(zip)<\/b><\/p>\n<p align=\"JUSTIFY\">Fecha um objeto zip criado anteriormente.<\/p>\n<p align=\"JUSTIFY\">Par\u00e2metros:<\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\">zip \u2013 objeto zip;<\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><b>4.3 \u2013 ret = pzip.crie(&#8216;arq&#8217;, arquivos, nivel);<\/b><\/p>\n<p align=\"JUSTIFY\">Cria um arquivo *.zip com uma lista de arquivos.<\/p>\n<p align=\"JUSTIFY\">Par\u00e2metros:<\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\">&#8216;arq&#8217; (string) \u2013 nome do arquivo, exemplo: &#8216;teste.zip&#8217;<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">arquivos (tabela) \u2013 Uma tabela com a lista de todos os arquivos alvos para compacta\u00e7\u00e3o, esses arquivos devem existir. Ex.: local arquivos = { &#8216;teste.c&#8217;, &#8216;teste.prisma&#8217;, &#8216;lib.pris&#8217;, &#8216;outro.txt&#8217;, &#8216;audio.mp3&#8217;, &#8216;video.mp4&#8217;, &#8216;\/home\/User\/meu_arquivo.xx&#8217;, &#8216;etc&#8217; }; \u00c9 poss\u00edvel passar a tabela diretamente se quiser.<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">nivel (n\u00famero) \u2013 n\u00edvel de compress\u00e3o ( 0 \u2013 sem compress\u00e3o; 1-9 = com compress\u00e3o, ou use a vari\u00e1vel reservada: pzip.NIVEL_COMPRESSAO_PADRAO);<\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><i><b>Dica: <\/b>use a biblioteca dir (igdir) para listar arquivos e depois passe como 2 par\u00e2metro da fun\u00e7\u00e3o acima!<\/i><\/p>\n<p align=\"JUSTIFY\"><b>4.4 \u2013 ret = pzip.extraia(&#8220;Arq&#8221;, &#8220;pasta&#8221;, callback, dado);<\/b><\/p>\n<p align=\"JUSTIFY\">Extrai automaticamente todo o conte\u00fado de um *.zip para determinada pasta.<\/p>\n<p align=\"JUSTIFY\">Par\u00e2metros:<\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\">&#8216;Arq&#8217; (string) \u2013 nome do arquivo zip a ser extra\u00eddo.<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">&#8216;pasta&#8217; (string) \u2013 nome da pasta destino onde ser\u00e1 extra\u00eddo o conte\u00fado. (deve existir);<\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\">callback (funcao ou nulo) \u2013 \u00e9 a fun\u00e7\u00e3o callback que ser\u00e1 executada automaticamente durante a extra\u00e7\u00e3o, veja o pot\u00f3tip da fun\u00e7\u00e3o:<\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: small;\">funcao callback (Arq, dado) <\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: small;\">imprima(Arq, dado) <\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: small;\">fim;<\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">dado (qualquer valor ou nulo) \u2013 \u00e9 o dado extra passado para callback automaticamente.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Veja um exemplo real desta fun\u00e7\u00e3o:<\/span><\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<colgroup>\n<col width=\"256*\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td valign=\"TOP\" width=\"100%\">\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">local zip = inclua&#8217;pzip&#8217;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">\/\/fun\u00e7\u00e3o callback ao extrair<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">funcao ao_extrair( arq, dado) <\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">imprimaf(&#8220;Arquivo extra\u00eddo: %s (%d)\\n&#8221;, arq, dado.cont);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">dado.cont = dado.cont + 1;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">retorne 0;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">fim<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">\/\/o dado extra pode ser qualquer valor, melhor uma tabela, j\u00e1 que dentro dela<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">\/\/podemos passar outros valores.<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">local dado = { cont=1 }; <\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip.extraia(&#8220;nome.zip&#8221;, &#8220;result&#8221;, ao_extrair, dado);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">\/\/ser\u00e1 extra\u00eddo dentro da pasta result<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Obs.: A callback e o dado extra s\u00e3o par\u00e2metros opcionais, podendo ser omitidos, neste caso n\u00e3o h\u00e1 como saber o progresso da extra\u00e7\u00e3o.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (falso ou verdadeiro) \u2013 falha ou sucesso.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5 \u2013 m\u00e9todos do objeto zip retornado pela fun\u00e3o .abra();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Aten\u00e7\u00e3o, use &#8216;:&#8217; ou &#8216;-&gt;&#8217; para acessar os m\u00e9todos.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.1 \u2013 ret = zip:abra_item(&#8216;Item&#8217;);<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Abre um item (arquivo) que est\u00e1 inserido no *.zip<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Esse m\u00e9todo s\u00f3 est\u00e1 presente quando o arquivo *.zip for aberto no modo &#8216;leitura&#8217;<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">&#8216;Item&#8217; (string) \u2013 o nome do arquivo dentro do *.zip, ex.: &#8216;dados\/teste.prisma&#8217;<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (falso ou verdadeiro) \u2013 falha ou sucesso.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.2 \u2013 ret = zip:feche_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Fecha o item atual aberto.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (falso ou verdadeiro) \u2013 falha ou sucesso.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.3 \u2013 ret = zip:total_itens();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna o n\u00famero de arquivos compactados dentro do *.zip.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros;<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (N\u00famero de itens ou falso);<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.4 \u2013 ret = zip:abra_item_por_indice(indice);<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Abre um item (arquivo comprimido) pelo seu \u00edndice num\u00e9rico. Todo zip tem de 1 a Total itens, podendo ser acessados pelo seu n\u00famero usando um la\u00e7o &#8216;para&#8217;, por exemplo.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">indice (n\u00famero) \u2013 o \u00edndice para acessar o item ( 1 \u2013 total);<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (falso ou verdadeiro) \u2013 falha ou sucesso.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.5 \u2013 nome = zip:nome_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna o nome do item atual acessado caso este seja acessado via \u00edndice.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros;<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">nome (string ou falso) &#8211; o nome do arquivo atual ou falso em caso de erro.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.6 \u2013 indice = zip:indice_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna o \u00edndice do item aberto atual.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros;<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">indice (n\u00famero) \u2013 o \u00edndice do item atual ou falso em caso de erro.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.7 \u2013 ret, nerro = zip:dir_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna verdadeiro se o item for um diret\u00f3rio (pasta);<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (verdadeiro ou falso) \u2013 Verdadeiro se o item for pasta, falso caso contr\u00e1rio.<\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">nerro (n\u00famero) \u2013 caso ret seja falso \u00e9 retornado um n\u00famero em nerro. Se for zero \u00e9 porque n\u00e3o \u00e9 pasta, caso seja menor que zero \u00e9 um erro que aconteceu.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.8 \u2013 ret = zip:tam_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna o tamanho do item (quando descompactado) em bytes.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (n\u00famero) \u2013 o tamanho do arquivo em bytes;<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.9 \u2013 ret = zip:crc32_item();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retorna o n\u00famero crc32 do item atual. O crc32 \u00e9 um m\u00e9todo de verifica\u00e7\u00e3o da integridade da string, para saber mais sobre crc32 fa\u00e7a uma busca na internet.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (n\u00famero) \u2013 crc32 do item atual.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.10 \u2013 ret = zip:escreva(&#8216;str&#8217;); \/\/este m\u00e9todo s\u00f3 est\u00e1 disponivel no modo &#8216;escrita&#8217;;<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Escreve (compacta) uma string no arquivo zip.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">&#8216;str&#8217; (string) \u2013 string a ser compactada.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (verdadeiro ou falso) \u2013 sucesso ou falha.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.11 \u2013 ret = zip:escreva_arquivo(&#8216;Arq&#8217;); \/\/este m\u00e9todo s\u00f3 est\u00e1 disponivel no modo &#8216;escrita&#8217;;<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Escreve (compacta) um arquivo diretamente para o zip.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">&#8216;Arq&#8217; (string) \u2013 o nome do arquivo para ser compactado.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (verdadeiro ou falso) \u2013 sucesso ou falha.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.11 \u2013 str = zip:leia();<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">L\u00ea (descompacta) o conte\u00fado de um item para uma string.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">N\u00e3o h\u00e1 par\u00e2metros.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">str (string) \u2013 a string do arquivo descompactada. (basta gravar a string em um arquivo depois)<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.12 \u2013 ret = zip:leia_arquivo(&#8216;Arq&#8217;);<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">L\u00ea (descompacta) diretamente para um arquivo.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">&#8216;Arq&#8217; (string) \u2013 nome do arquivo a ser descompactado. Ex.: teste.prisma<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (verdadeiro ou falso) \u2013 sucesso ou falha.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>5.13 \u2013 ret = zip:extraia_item( callback, dado);<\/b><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Extrai um item aberto para uma string. A string \u00e9 passada pela callback.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Par\u00e2metros:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">callback (fun\u00e7\u00e3o) \u2013 fun\u00e7\u00e3o Prisma com os seguintes par\u00e2metros: <\/span><\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<colgroup>\n<col width=\"256*\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td valign=\"TOP\" width=\"100%\">\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">funcao ao_extrair_item(arg, limite, str, tam) retorne tam; fim<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Em que:<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">* arg (qualquer valor) &#8211; \u00e9 o dado extra.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">* limite (n\u00famero) \u00e9 o offset do buffer<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">*str (string) \u2013 \u00e9 a string parcial descompactada.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">*tam (n\u00famero) \u2013 \u00e9 o tamanho da string descompactada.<\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Obs.: esses par\u00e2metros s\u00e3o passados automaticamente pela fun\u00e7\u00e3o chamadora.<\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">dado (qualquer valor) \u2013 \u00e9 um dado extra caso queira passar algum valor para dentro da callback pela fun\u00e7\u00e3o chamadora. Para passar mais de um dado, use tabela.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Retornos:<\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">ret (verdadeiro ou falso) \u2013 sucesso ou falha.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Veja um exemplo completo de uso:<\/span><\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<colgroup>\n<col width=\"256*\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td valign=\"TOP\" width=\"100%\">\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">local pz = inclua&#8217;pzip&#8217;;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">dado = {<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">str=&#8221;; \/\/buffer do conte\u00fado do arquivo descompactado<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">tam=0; \/\/tamanho do arquivo descompactado<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">}<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">funcao ao_extrair_item(arg, limite, str, tam)<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">imprima(&#8216;-&gt;&#8217;,limite);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">arg.str = arg.str .. str;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">dado.tam = dado.tam + tam;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">retorne tam;<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">fim<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip = pz.abra(&#8216;nome.zip&#8217;, 0, &#8216;leitura&#8217;);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip:abra_item(&#8216;algo.c&#8217;);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip:extraia_item(ao_extrair_item, dado);<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">imprima(dado.str, dado.tam);\/\/s\u00f3 salvar em um arquivo em vez de imprimir<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip:feche_item();<\/span><\/span><\/p>\n<p align=\"JUSTIFY\"><span style=\"font-family: Courier 10 Pitch;\"><span style=\"font-size: small;\">zip:feche();<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>Dica! <\/b>&#8211; Caso queira usar este m\u00e9todo para descompactar um zip contendo v\u00e1rios arquivos que voc\u00ea n\u00e3o sabe o nome, use as fun\u00e7\u00f5es: <\/span><\/p>\n<ol>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>ret = zip:total_itens(); <\/b><\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>ret = zip:abra_item_por_indice(\u00edndice);<\/b><\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\"><b>nome = zip:nome_item(); <\/b><\/span><\/p>\n<\/li>\n<li>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">e por fim basta usar o nome do item atual para extra\u00ed-lo.<\/span><\/p>\n<\/li>\n<\/ol>\n<p align=\"JUSTIFY\"><span style=\"font-size: medium;\">Veja um exemplo abaixo:<\/span><\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<colgroup>\n<col width=\"256*\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td valign=\"TOP\" width=\"100%\">\n<pre class=\"lang:default decode:true \">local pz = inclua'pzip';\r\n\r\nlocal dir = inclua'dir';\r\n\r\nlocal funcao ao_extrair_item(arg, limite, str, tam)\r\n\r\nimprimaf('%s', '\\rDescompactando[' .. arg.cont ..'\/' .. arg.total .. ']');\r\n\r\nes.esvazie();\r\n\r\narg.str = arg.str .. str;\r\n\r\narg.tam = arg.tam + tam;\r\n\r\narg.cont = arg.cont + 1;\r\n\r\nsis.durma(100); \/\/para ver o resultado mais devagar, tire as barras do come\u00e7o\r\n\r\nretorne tam;\r\n\r\nfim\r\n\r\nfuncao principal()\r\n\r\nse nao dir.dir_existe('dados') entao dir.criedir('dados'); fim\r\n\r\nlocal dado = {\r\n\r\nstr='';\r\n\r\ncont=1;\r\n\r\ntotal=0;\r\n\r\ntam=0;\r\n\r\n}\r\n\r\nlocal zip = pz.abra('z_arq.zip', 0, 'leitura');\r\n\r\nlocal total_itens = zip:total_itens();\r\n\r\ndado.total = total_itens;\r\n\r\nimprima('total de itens:',total_itens);\r\n\r\npara i=1, total_itens inicio\r\n\r\nzip:abra_item_por_indice(i);\r\n\r\nlocal nome = zip:nome_item();\r\n\r\nzip:extraia_item(ao_extrair_item, dado);\r\n\r\ndir.grave_arquivobin( 'dados\/'.. nome, dado.str);\r\n\r\nzip:feche_item(); \/\/feche o item atual para acessar outro.\r\n\r\nfim\r\n\r\nzip:feche();\r\n\r\nretorne 0;\r\n\r\nfim<\/pre>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"CENTER\"><span style=\"color: #3333ff;\"><span style=\"font-family: Purisa;\"><span style=\"font-size: xx-large;\"><b>FIM<\/b><\/span><\/span><\/span><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: medium;\"><b>Para mais exemplos veja a pasta exemplos no arquivo de download desta biblioteca.<\/b><\/span><\/span><\/span><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: medium;\"><b>Sinta-se a vontade para dar sugest\u00f5es ou cr\u00edticas, ou ainda, em caso de d\u00favidas visite o f\u00f3rum oficial: <a href=\"http:\/\/linguagemprisma.br4.biz\/prisma_forum\">http:\/\/linguagemprisma.br4.biz\/prisma_forum<\/a> <\/b><\/span><\/span><\/span><\/p>\n<p align=\"LEFT\"><span style=\"color: #000000;\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: medium;\"><b>ou pelo e-mail: <a href=\"mailto:linguagemprisma@gmail.com\">linguagemprisma@gmail.com<\/a><\/b><\/span><\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ZIP \u00e9 um formato de compress\u00e3o de arquivos muito utilizado e uma ferramenta dessas n\u00e3o deve faltar em uma linguagem de programa\u00e7\u00e3o. Pzip \u00e9 uma biblioteca Prisma que cumpre tal tarefa, feita em C ela \u00e9 r\u00e1pida e eficiente. Com fun\u00e7\u00f5es b\u00e1sicas \u00e9 poss\u00edvel criar e manipular arquivos zip, inclusive descompact\u00e1-los. Baixar pzip &#8211; (linux&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3254","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=3254"}],"version-history":[{"count":1,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3254\/revisions"}],"predecessor-version":[{"id":3255,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3254\/revisions\/3255"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=3254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=3254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=3254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}