Jump to content

2 Dia do ACBr

Visite Stands dos Patrocinadores
Control iD, CS Devices, Elgin, Gertec, Bematech, Jetway, PlugMobile, Epson, Custom e Sweda
Inscreva-se

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Juliana TECNOSOFT

COMPACTAR STRINGS NO DELPHI

Recommended Posts

Boa tarde,

Me perdoem caso já tenha algum  tópico sobre minha dúvida, estou postando, pois não encontrei nada a respeito do que preciso, caso já tenha no forum, peço por gentileza que passem o link.

Alguém sabe me dizer, como faço para compactar uma string utilizando uma funcao nativa do Delphi?(utilizo Delphi Tokyo).

No caso, salvei em uma string todo o conteudo do xml de uma nfe assim que ela foi autorizada (não salvei em disco), quero pegar essa string, compacta-la, para salvar direto em meu banco de dados e quando for consultar a nota, fazer a descompactacao dessa string e poder visualizar o danfe atraves dela e tambem o xml. (minha intencao é não salvar o xml maisl em disco, e sim salvar compactado direto no banco de dados).

 

Share this post


Link to post
Share on other sites
3 minutos atrás, Juliana TECNOSOFT disse:

Alguém sabe me dizer, como faço para compactar uma string utilizando uma funcao nativa do Delphi?(utilizo Delphi Tokyo). 

Nativa do Delphi não conheço, mas se já usa ACBr estude o método ACBrNFe.Enviar.

Quando o parâmetro Zipado é True o ACBr faz a compactação do XML e posteriormente converte em base64.

  • Like 1

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Share this post


Link to post
Share on other sites
3 minutos atrás, BigWings disse:

Nativa do Delphi não conheço, mas se já usa ACBr estude o método ACBrNFe.Enviar.

Quando o parâmetro Zipado é True o ACBr faz a compactação do XML e posteriormente converte em base64.

Vou verificar se é o que preciso, obrigada.

  • Like 1

Share this post


Link to post
Share on other sites

A ZLib está disponível no Delphi. O programa console abaixo dá uma ideia, mas seria melhor você trabalhar com streams ao invés de strings.

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.ZLib;

var
  Input, output: string;
  bb: TStringStream;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Input := 'String a ser compactada';
    bb := TStringStream.Create(ZCompressStr(Input));
    Output := bb.DataString;
    Writeln(output);
    readln;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites
16 horas atrás, EMBarbosa disse:

A ZLib está disponível no Delphi. O programa console abaixo dá uma ideia, mas seria melhor você trabalhar com streams ao invés de strings.

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.ZLib;

var
  Input, output: string;
  bb: TStringStream;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Input := 'String a ser compactada';
    bb := TStringStream.Create(ZCompressStr(Input));
    Output := bb.DataString;
    Writeln(output);
    readln;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

Fiz um teste com as funcoes ZCompressString para compactar e ZDecompressString para descompactar, mas não deu certo, pois compactou apenas uma parte da string, voce já utilizou essas funcoes?

Referente ao exemplo acima, utilizando a ZCompressString, compactou, mas nao consegui utilizar a ZDecompressStr para verificar se realmente o arquivo compactado é a string inteira, ou apenas uma parte.

Você tem um exemplo do ZDecompressStr?

No meu caso, a string que preciso compactar é o xml de uma nfe autorizada (nao estou salvando o arquivo em disco), a minha intencao é pegar o xml apos a autorizacao salvar em uma string(isso ja consegui), depois compactar essa string e salvar em meu banco de dados, e quando for consultar a nota ou imprimir o danfe da mesma, descompactar a string.

Share this post


Link to post
Share on other sites
11 minutos atrás, Juliana TECNOSOFT disse:

Você tem um exemplo do ZDecompressStr? 

Segue:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.ZLib;

var
  Input, output, descomp: string;
  bb: TStringStream;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Input := 'String a ser compactada';
    bb := TStringStream.Create(ZCompressStr(Input));
    Output := bb.DataString;
    Writeln(output);
    readln;
    descomp := ZDecompressStr(bb.Bytes);
    Writeln(descomp);
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

11 minutos atrás, Juliana TECNOSOFT disse:

mas nao consegui utilizar a ZDecompressStr para verificar se realmente o arquivo compactado é a string inteira, ou apenas uma parte. 

Como eu disse acima, seria melhor você esquecer esse negócio de compactar string e começar a trabalhar com streams. Ao salvar uma string compactada no BD você pode ter problemas ao fazer o processo inverso.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites
3 minutos atrás, EMBarbosa disse:

Segue:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.ZLib;

var
  Input, output, descomp: string;
  bb: TStringStream;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Input := 'String a ser compactada';
    bb := TStringStream.Create(ZCompressStr(Input));
    Output := bb.DataString;
    Writeln(output);
    readln;
    descomp := ZDecompressStr(bb.Bytes);
    Writeln(descomp);
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

Como eu disse acima, seria melhor você esquecer esse negócio de compactar string e começar a trabalhar com streams. Ao salvar uma string compactada no BD você pode ter problemas ao fazer o processo inverso.

Ok, vou testar utilizando strems. Obrigada

Share this post


Link to post
Share on other sites
29 minutos atrás, Juliana TECNOSOFT disse:

Ok, vou testar utilizando strems. Obrigada

 

33 minutos atrás, EMBarbosa disse:

Segue:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.ZLib;

var
  Input, output, descomp: string;
  bb: TStringStream;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Input := 'String a ser compactada';
    bb := TStringStream.Create(ZCompressStr(Input));
    Output := bb.DataString;
    Writeln(output);
    readln;
    descomp := ZDecompressStr(bb.Bytes);
    Writeln(descomp);
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

Como eu disse acima, seria melhor você esquecer esse negócio de compactar string e começar a trabalhar com streams. Ao salvar uma string compactada no BD você pode ter problemas ao fazer o processo inverso.

Voce tem algum exemplo com Stream?

 

 

Share this post


Link to post
Share on other sites
1 minuto atrás, Juliana TECNOSOFT disse:

Voce tem algum exemplo com Stream?

Esse exemplo acima mesmo. Ele  usa parcialmente um TStringStream. Mas se você for utilizar diretamente Streams, você pode utilizar os métodos

    ZCompressStream();
    ZDecompressStream();

 


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites
2 minutos atrás, EMBarbosa disse:

Esse exemplo acima mesmo. Ele  usa parcialmente um TStringStream. Mas se você for utilizar diretamente Streams, você pode utilizar os métodos

    ZCompressStream();
    ZDecompressStream();

 

OK, estou fazendo um teste para ver se vai dar certo conforme preciso.

Obrigada

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...