Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
|
PPMD Streaming String CompressionDemonstrates streaming string compression using PPMD. Data may be compressed in chunks by initially calling one of the BeginCompress* methods, followed by 0 or more calls to a MoreCompress* method, and terminating with a call to an EndCompress* method. Likewise, data may be decompressed by calling a BeginDecompress* method, followed by 0 or more MoreDecompress* calls, and ending with an EndDecompress* method call. This example demonstrates string-to-string compression and decompression in chunks. Download the Chilkat Compression ActiveX here: ChilkatCompression.zip uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATCOMPRESSIONLib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var compress: TChilkatCompression; success: Integer; strData: String; i: Integer; strCompressed: String; strOriginal: String; chunk1: String; chunk2: String; chunk3: String; chunk4: String; begin compress := TChilkatCompression.Create(Self); // Any string argument automatically begins a 30-day trial. success := compress.UnlockComponent('30-day trial'); if (success <> 1) then begin ShowMessage('Compression component unlock failed'); end; compress.Algorithm := 'ppmd'; compress.Charset := 'ansi'; compress.EncodingMode := 'base64'; // Create a long string to compress. strData := 'abcdefg1122334455667788'; strData := strData + #13#10; // Note: BeginCompressStringENC may return a zero-length // string. This is normal if the input is buffered and no // compressed data is yet available. // However, a null reference indicates an error -- which is // generally only possible if the component was never unlocked. strCompressed := compress.BeginCompressStringENC(strData); if (strCompressed = NULL ) then begin ShowMessage(compress.LastErrorText); end; // Compress 100 more chunks of data. Each call to // MoreCompressStringENC may or may not produce additional // compressed output. for i := 0 to 99 do begin strData := 'abcdefg1122334455667788'; strData := strData + #13#10; strCompressed := strCompressed + compress.MoreCompressStringENC(strData); end; // Finalize the compression with a single call to EndCompressStringENC: strCompressed := strCompressed + compress.EndCompressStringENC(); // Display the compressed string. // The result will be: // ec8YZ5vk9za18d0plwuV7R65em9OZge9gJXht/QAAAAAAAAAABNOZQAAKw== Memo1.Lines.Add(strCompressed); // Decompress back to the original in a single call. strOriginal := compress.DecompressStringENC(strCompressed); // Display the uncompressed original: Memo1.Lines.Add('--- Original ---'); Memo1.Lines.Add(strOriginal); // Decompress in multiple calls. It doesn't matter how the // compressed data is split -- it could be fed to the decompressor // one char at a time if desired. chunk1 := 'ec8YZ5vk9za1'; chunk2 := '8d0p'; chunk3 := 'lwuV7R65em9OZge9gJXht/QAAAA'; chunk4 := 'AAAAAABNOZQAAKw=='; strOriginal := ''; strOriginal := compress.BeginDecompressStringENC(chunk1); strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk2); strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk3); strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk4); strOriginal := strOriginal + compress.EndDecompressStringENC(); // Display the uncompressed original after decompressing in chunks: Memo1.Lines.Add('--- Original after Decompressing from Chunks ---'); Memo1.Lines.Add(strOriginal); end; |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2008 Chilkat Software, Inc. All Rights Reserved.