Kompresja słownikowa

0

Hej,

od dłuższego czasu usiłuję znaleźć jakiś kod, który dla podanego słownika i pliku wejściowego zrobi <ort>zkompresowany </ort>plik wyjściowy, tak aby potem użyć tego pliku aby <ort>z powrotem </ort>otrzymać plik wejściowy. Problem w tym, że każdy kod jaki znalazłem nie potrzebuje słownika albo ten słownik dodaje do pliku wyjściowego. U mnie plik ten jest dostępny, więc nie ma potrzeby jego dodawania.
Mam nadzieję że ktoś sypnie w miarę prostym kodem.

Z góry dzięki,
Payl

0

Nie wiem co to ta kompresja słownikowa, skoro nie potrzebna Tobie żadnego slownika, to nie może być najprostszy ZLib?
Poniżej masz procedurę kompresji Streama ZLibem oraz jego dekompresję. I wystarczy do sekcji uses, dodać moduł ZLib.

procedure PackMemStream(var MemoryStream : TMemoryStream);
var
  I : integer;
  PStrm : Pointer;
begin
  CompressBuf(MemoryStream.Memory, MemoryStream.Size, PStrm, I);
  MemoryStream.Clear;
  MemoryStream.Write(PStrm^, i);
end;

function UnpackMemStream(var MemoryStream : TMemoryStream) : boolean;
var
  PStrm : Pointer;
  I, Tmp : integer;
begin
  Tmp := 0;
  Result := False;
  if MemoryStream.Size = 0 then
  begin
    Exit;
  end;
  try
    DecompressBuf(MemoryStream.Memory, MemoryStream.Size, Tmp, PStrm, I);
    MemoryStream.Clear;
    MemoryStream.Write(PStrm^, I);
    MemoryStream.Position := 0;
  except
    Exit;
  end;
  Result := True;
end;
0

Mówiłem, ma być dodatkowy plik-słownik. Chodzi mi o to aby tak skompresowany plik był malutki, i dlatego chcę użyć pliku ze słownikiem, a taką kompresję jaką dałeś (a nawet lepszą?) można zrobić używając chociażby konsolki 7zipa.

0

przecież "kompresowanie" (kodowanie) metodą słownikową możesz bez problemu zrobić ręcznie, zamieniając zawartość pliku na wyrazy ze słownika choćby przy użyciu Tfilestream itp. Poczytaj o TfileStream, bardzo prosta klasa.

Jeżeli nie to zobacz czy WinRar obsługuje taą kompresję. Winrar udostępnia swoj program także z obsługi konsoli więc nie będziesz miał problemu. Wywołujesz polecenie odpowiadające poleceniu w CMD poprzez WinExec(), ShellExecute() Winrar udostępnia także pełną dokumentacje do tego programu.

a jak nie to pokaż jakiś przykładowy słownik jak to wygląda to może się coś wymyśli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1