1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida Usando Zlib para descompactar

Discussão em 'Progress 4GL' iniciado por hpfaff, Maio 6, 2024.

  1. hpfaff

    hpfaff Membro Participativo

    Bom dia... mais uma...

    Recebo uma string que na verdade é um gzip. Converto ela para gzip e depois uso o zlib para descompactar.

    Mas o zlib está descompactando parte do arquivo somente, não a totalidade. Se abro o gzip no 7zip e extraio, o arquivo vem completo .

    Abaixo o código (esse longchar do compactado está truncado pois é uma info comercial que não posso mostrar).

    using net.progress.encode.gzip.Zlib.
    DEFINE VARIABLE cLongChar AS LONGCHAR NO-UNDO.
    DEFINE VARIABLE decdmptr AS MEMPTR NO-UNDO.
    DEFINE VARIABLE hExtract AS HANDLE NO-UNDO.
    DEFINE VARIABLE cArqZip AS CHARACTER NO-UNDO.
    DEFINE VARIABLE cArqFinal AS CHARACTER NO-UNDO.
    DEFINE VARIABLE zipfileBuffer AS MEMPTR NO-UNDO.
    DEFINE VARIABLE unzipfileBuffer AS MEMPTR NO-UNDO.
    DEFINE VARIABLE viSuccess AS INTEGER NO-UNDO.
    DEFINE VARIABLE viOutputSize AS INTEGER NO-UNDO.
    delete object Zlib:getInstance() no-error.
    ASSIGN cLongChar = "H4sIAAAAAAAEAJ05aZeiyLJ//okNhoYeAAA=".
    decdmptr = BASE64-DECODE(cLongChar).
    ASSIGN cArqZip = "C:\tmp\doc_compact.gzip" .
    cArqFinal = "c:\tmp\doc_compact_extract.xml".
    COPY-LOB FROM decdmptr TO FILE cArqZip.
    Zlib:getInstance():uncompressFile(cArqZip, cArqFinal, TRUE).
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Pq não descompacta direto o texto origem para uma variável LONGCHAR.

    Nunca fiz da forma que tu fez, inclusive, esse "H4sIAAAAAAAEAJ05aZeiyLJ//okNhoYeAAA=" não parece ser válido, pq se fosse válido
    seria possível descompactar usando o site: http://www.unit-conversion.info/texttools/compress/
  3. hpfaff

    hpfaff Membro Participativo

    Sim Rafael, ele não é valido mesmo, como falei

    Esse longchar é um zip em base-64.

    Como descompactar em um longchar?
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Esse código aqui compacta e descompacta strings.

    Usei muito num cliente onde transformava uma "tabela string" de 32.000 caracteres para menos de 1000 caracteres.

    Tinha uma função que recebia uma temp-table e retornava uma tabela estruturada em string.
    Exemplo:
    ID|Nome|DataNasc|Endereco¶
    1|Rafael|03/03/1984|Rua X¶
    2|Carla|07/11/1998|Rua Y

    Compactava com o zLib, chegava do lado cliente, descompactava e fazia o processo inverso
    pra voltar a ser uma temp-table preenchida, e a estrutura da temp-table origem e destino ficava numa include usada nas duas pontas.

    Era uma estrutura "Thin Client", onde o lado cliente não precisaria nem ter conexão com o banco de dados, foi muito útil pra reduzir o custo do uso de licenças

    Arquivos Anexados:

    • zlib.p
      Tamanho:
      4.1 KB
      Visitas:
      5
    Última edição: Maio 6, 2024
  5. hpfaff

    hpfaff Membro Participativo

    Tentei com o seu código e não deu certo.

    Esse é com um real.. faça um teste e veja que ele não descompacta totalmente.

    using net.progress.encode.gzip.Zlib.
    DEFINE VARIABLE cLongChar AS LONGCHAR NO-UNDO.
    DEFINE VARIABLE decdmptr AS MEMPTR NO-UNDO.
    DEFINE VARIABLE hExtract AS HANDLE NO-UNDO.
    DEFINE VARIABLE cArqZip AS CHARACTER NO-UNDO.
    DEFINE VARIABLE cArqFinal AS CHARACTER NO-UNDO.
    DEFINE VARIABLE zipfileBuffer AS MEMPTR NO-UNDO.
    DEFINE VARIABLE unzipfileBuffer AS MEMPTR NO-UNDO.
    DEFINE VARIABLE viSuccess AS INTEGER NO-UNDO.
    DEFINE VARIABLE viOutputSize AS INTEGER NO-UNDO.
    delete object Zlib:getInstance() no-error.
    DEFINE VARIABLE MemorySizeBuffer AS INTEGER INIT 104857600.
    ASSIGN cLongChar = "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".
    decdmptr = BASE64-DECODE(cLongChar).
    ASSIGN cArqZip = "C:\tmp\temp_2.7z" .
    cArqFinal = "c:\tmp\text-uncompress.xml".
    COPY-LOB FROM decdmptr TO FILE cArqZip.
    Zlib:getInstance(MemorySizeBuffer):uncompressFile(cArqZip, cArqFinal, TRUE).
    message 'done' view-as alert-box.
    catch e as Progress.Lang.Error :
    message 'error' skip e:getmessage(1) view-as alert-box.
    end catch.
    finally:
    set-size(decdmptr) = 0.
    end.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Esse código é inválido, coloca no site lá que falei e não retorna nada, poderia enviar aqui um TXT com o valor original pra eu compactar e comparar com esse aí?

Compartilhe esta Página