Ir para conteúdo
  • Cadastre-se

dev botao

COMPACTAR STRINGS NO DELPHI


  • Este tópico foi criado há 1987 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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).

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
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.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros sites

  • Consultores
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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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?

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros 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

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1987 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.