Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei nur aus 0 und 1 komprimieren (https://www.delphipraxis.net/16279-datei-nur-aus-0-und-1-komprimieren.html)

lkz633 14. Feb 2004 10:40


Datei nur aus 0 und 1 komprimieren
 
Hallo,

ich habe eine 16 MB grosse Datei, die nur aus 0 und 1 besteht. Hat jemand eine Idee wie ich soetwas komprimieren kann, kenne mich damit leider überhaupt nicht aus. Winrar mach daraus ca. 150 kb, würde das aber gerne unter 50 hinbekommen. Da nur 0 und 1 müsste das doch sicherlich gehen, aber wie?

Bin für jeden Code oder Hinweis dankbar
Gruss lkz633

PS: Wusste nicht genau in welche Sparte, sorry

SirThornberry 14. Feb 2004 10:49

Re: Datei nur aus 0 und 1 komprimieren
 
also aus 16 mb, 160 kb zu machen ist schon so ziemlich das beste... wenn du 16 durch 8 teilst (also das ganze zu bytes zusammensetzt) und dann die 2 mb durch 160 kb teilst isses ne supi kompression

lkz633 14. Feb 2004 11:09

Re: Datei nur aus 0 und 1 komprimieren
 
Hatt jemand code oder Ideen wie ich das überhaupt prinzipiell anstellen müsste, z.B auch 150 kb hinzubekommen?

Gruss lkz633

Minz 14. Feb 2004 11:09

Re: Datei nur aus 0 und 1 komprimieren
 
Vom Prinzip her könntest du alle aufeinander folgenden 0 und 1 zählen.

Also aus 11111100010000 wird dann
6x1,3x0,1x1,4x0 -> diese Folge ist allerdings sogar 1 Zeichen länger

Es gilt also eine richtige Formatierung zu finden, so dass alles unter 4-facher Wiederholung nicht berücksichtigt wird, weil dies keine Einsparung bedeuted

6x1/0001/4x0 Dieses Teil hat immerhin schon 2 Zeichen weniger als der Ursprung

Tja und so kann man dann kreativ werden und sich verschiedene Methoden der Kompression ausdenken. Ziemlich mühsam.

Also aus den 16mb 150kb zu machen, ist wirklich nicht schlecht. :mrgreen:

16.000.000 byte -> 150.000 Byte, dass heißt eine Einsparung von 99 % !!

Gruß Minz

FriFra 14. Feb 2004 11:14

Re: Datei nur aus 0 und 1 komprimieren
 
ich nehme mal an, dass es sich um eine ASCII-Datei handelt...

Dann könntest Du die Datei schonmal sehr einfach auf die Hälfte schrumpfen ;)
Code:
ASCII    HEX                 "Komprimiert" HEX
010010    30 31 30 30 31 30    01 00 10
Du musst Die nur etwas einfallen lassen, wie Du die Länge speicherst, denn bei ungerader Länge gibt es sonst beim "Dekomprimieren" ein kleines Problem mit dem letzten Zeichen ;)

lkz633 14. Feb 2004 11:34

Re: Datei nur aus 0 und 1 komprimieren
 
Das ist ledier schon Hexadezimal :-)

Gruss lkz633

MrKnogge 14. Feb 2004 11:40

Re: Datei nur aus 0 und 1 komprimieren
 
Zitat:

Zitat von SirThornberry
also aus 16 mb, 160 kb zu machen ist schon so ziemlich das beste... wenn du 16 durch 8 teilst (also das ganze zu bytes zusammensetzt) und dann die 2 mb durch 160 kb teilst isses ne supi kompression

warum durch 2 teilen ?

FriFra 14. Feb 2004 11:48

Re: Datei nur aus 0 und 1 komprimieren
 
Du könntest aber z.B. hergehen und jeweils 20er Binärblöcke in 5-stellige Hexadezimalzahlen umwandeln.

Code:
Original:
11111111111111111111 11010010101100111000 11110001110101110101 00000000000000000000

Komprimiert:
FFFFF D2B38 F1D75 00000
Im Beispiel musst Du natürlich sicher stellen, dass deine neuen Blöcke jeweils 5 -Stellig bleiben, damit Du es auch wieder dekodieren kannst ;)
Dieses Verfahren schrumpft das ganze schon auf ein Viertel zusammen und das ist sicher noch Ausbaufähig.
Wobei Du auch hier eine Lösung für den letzten Block finden musst, da die Dateilänge sicher nicht immer durch 20 teilbar ist.

lkz633 14. Feb 2004 12:45

Re: Datei nur aus 0 und 1 komprimieren
 
Danke für eure Ideen, das hilft mir schon mal weiter

Gruss lkz633

stoxx 14. Feb 2004 14:59

Re: Datei nur aus 0 und 1 komprimieren
 
Zitat:

Zitat von lkz633
Hallo,

ich habe eine 16 MB grosse Datei, die nur aus 0 und 1 besteht. Hat jemand eine Idee wie ich soetwas komprimieren kann, kenne mich damit leider überhaupt nicht aus. Winrar mach daraus ca. 150 kb, würde das aber gerne unter 50 hinbekommen.


7 -Zip dürfte noch bissl besser sein. Macht die kleinsten Zip Formate.
Das eigene 7z Format ist zwar noch kleiner, aber kann ja keiner lesen *g*
Ansonsten dauert es auch länger als mit anderen Packprogrammen.

http://www.7-zip.org/

Aber Quellcodes sind da natürlich nicht dabei.

Assarbad 14. Feb 2004 17:51

Re: Datei nur aus 0 und 1 komprimieren
 
Zitat:

Zitat von stoxx
Aber Quellcodes sind da natürlich nicht dabei.

Und wieso bitte nicht, wenn es OpenSource ist???
http://sourceforge.net/projects/sevenzip/

stoxx 14. Feb 2004 17:55

Re: Datei nur aus 0 und 1 komprimieren
 
Code:
Und wieso bitte nicht, wenn es OpenSource ist???
[url]http://sourceforge.net/projects/sevenzip/[/url]

da muss ich Dir doch glatt Recht geben *g* .. also sorry für die Falsch infos .
Aber leider kein Delphi.

Assarbad 14. Feb 2004 18:06

Re: Datei nur aus 0 und 1 komprimieren
 
Wohl wahr ... aber wer nur Delphi kann ist genauso aufgeschmissen wie jemand, der nur Deutsch kann ;)

stoxx 14. Feb 2004 18:12

Re: Datei nur aus 0 und 1 komprimieren
 
Zitat:

Zitat von Assarbad
Wohl wahr ... aber wer nur Delphi kann ist genauso aufgeschmissen wie jemand, der nur Deutsch kann ;)


hab mal noch eine Frage an Dich.

Ich möchte z.B. eine 100 MB große Datei, bestehend aus einzelnen Records, packen.
Das Problem, jedes Record hat eine Zeitinformation. (natürlich aufsteigend *g*) Und die brauch ich zum suchen.

Code:
Trecord  = packed record
 Time   : TDateTime;
 wert1    : double;
 wert2       : integer;

end;

jetzt hab ich mir gedacht. ich mach aus 100 solcher Records immer einen Container. und jeder Container enthält eine Zeitinformation. So kann ich also erst bequem in den Container Informationen gucken. Und bei Bedarf den Container auspacken.
Problem dabei, die Container müssten in gepackter Form eine gleichmäßige Größe haben.
es wäre auch nicht so schlimm wenn nur 99 solcher Records in einem Container wären, kann man ja auch in den Container Informationen eintragen.
Aber kennst Du Quellcodes von Packalgorithmen ? .. also nich immer nur die fertigen Dlls, die man einbinden kann ?
wie packe ich solche Arrays am besten zusammen ?

DAnke !

Assarbad 14. Feb 2004 19:39

Re: Datei nur aus 0 und 1 komprimieren
 
Hmm, also ich würde dann irgendwo am Anfang der Datei einen Suchindex erzeugen. Dieser Index enthielte dann die Zeiten und ein Offset. Danach würde ich die Records einzeln packen und sequentiell schreiben. Dann die Offsets eintragen. So können die Records einzeln ne Unterschiedliche Größe haben und dennoch lokalisiert werden. Der Trick wäre also einfach die Trennung des offenbar statischen Suchfeldes von den restlichen Daten.

stoxx 14. Feb 2004 22:16

Re: Datei nur aus 0 und 1 komprimieren
 
wäre auch ein Idee.

Hast Du zufällig Quellcodes von Packalgorithmen auf Deiner Platte ?
Danke !


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz