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 platzsparend als Text speichern (https://www.delphipraxis.net/75448-datei-platzsparend-als-text-speichern.html)

L85 19. Aug 2006 09:59


Datei platzsparend als Text speichern
 
Also ich möchte irgendeine Datei(exe,res,txt,doc,usw..) in einen Text bzw in Zahlen konvertieren sodass man sie als doc oder txt speichern kann(und lesen, muss aber keinen sinn ergeben) und sie dann auch möglichstwieder zurückkonvertieren kann.
Bisher habe ich das gefunden leider ist er aber nicht wirklich platzsparend:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Source,Data:TMemoryStream;
var Str:String;
var Y:Byte;
var i,res:integer;


begin
opendialog1.Execute()   ;
 Source:=TMemoryStream.Create;
Source.LoadFromFile(opendialog1.FileName);
Data:=TMemoryStream.Create;
progressbar1.Min:=0;
progressbar1.Max:=Source.Size;
 While source.Position<source.Size do begin
Source.Read(Y,SizeOF(Y));
progressbar1.Position:=Source.Position;
res:=Y ;
str:=inttostr(res);
  For i:=1 to 3 do begin
res:=Ord(str[i]);
Data.Write(res,1);
end;   end;
Source.Free;
savedialog1.execute;
data.SaveToFile(savedialog1.FileName);
 end;

himitsu 19. Aug 2006 10:07

Re: Datei platzsparend als Text speichern
 
Das einfachste wäre wohl im HEX-format (HexToStr), aber platzsparender wäre wohl eine Variante im Base64-Format.

HEX(16 Chars): 1 Byte = 2 Zeichen (also doppelt so groß)
Base64(64 Chars): ... ich glaub so'n drittel größer ... kannst ja ma nachrechnen

theoretisch ginge es auch mit kann 230 Chars, wenn man den gesamten Ansi-Zeichenvorrat ausnutzt ... knapp 1.05 mal so groß

Klaus01 19. Aug 2006 11:01

Re: Datei platzsparend als Text speichern
 
..oder uuencode das Verhältnis ist dann (Original)3 zu (codiert) 4.

Grüße
Klaus

L85 19. Aug 2006 15:04

Re: Datei platzsparend als Text speichern
 
Base64 habe ich in dem zusammenhang schonmal gehört aber wie nutze ich das für meinen zweck?
Der Pc ansich verarbeitet doch alles Binär gibt es keine Möglichkeit das man direkt an den binärcode der Datei kommt?

mschaefer 19. Aug 2006 15:25

Re: Datei platzsparend als Text speichern
 
Da hilft die SZCodeBaseX Komponente von Sasa Zeman, die sich unter www.szutils.net findet.
Man kann damit schön verschieene Algorithmen ausprobieren.

Grüße // Martin

L85 20. Aug 2006 07:15

Re: Datei platzsparend als Text speichern
 
Danke werde ich gleich mal testen :P

Alexander Roth 20. Aug 2006 09:26

Re: Datei platzsparend als Text speichern
 
Zitat:

Zitat von L85
Also ich möchte irgendeine Datei(exe,res,txt,doc,usw..) in einen Text bzw in Zahlen konvertieren sodass man sie als doc oder txt speichern kann(und lesen, muss aber keinen sinn ergeben) und sie dann auch möglichstwieder zurückkonvertieren kann.

Nichts einfacher als das: Editor--> Datei--> Öffnen-->Alle Dateien--> Auswählen
Und schon siehst du völlig sinnlosen Text.

Und platzsparend, na ja ich weis nicht, ob wenn man das als Text abspeichert plazparender wird. Viel effizienter dürfte das sein, wenn du das einfach in zip packst. (Gibt es komponenten)

Christian Seehase 20. Aug 2006 12:10

Re: Datei platzsparend als Text speichern
 
Moin L85,

kombiniere doch Himitsus und Alexanders Vorschläge.
Wandele die Bytes der Datei in einen Hexstring um, und komprimiere das Ergebnis (ZIP, CAB o.ä.)
Das umwandeln verdoppelt dann zwar die Grösse, aber das Komprimieren könnte dann wieder was rausholen (ggf. mal verschiedene Verfahren für so eine Datei testen.)
Komprimieren z.B. mit TurboPower Abbrevia. Zu finden bei sourceforge.


@Alexander:
Vorsicht, wenn Du eine Binärdatei im Notepad öffnest und speicherst.
Die Nullen (#00) werden in Blanks umgewandelt.

SirThornberry 20. Aug 2006 13:12

Re: Datei platzsparend als Text speichern
 
Die Idee von Christian ist nicht schlecht. Allerdings würde ich erst komprimieren und dann in hex umwandeln etc. Denn wenn du erst wandelst und dann komprimierst hast du wieder Zeischen welche in einer Worddatei nicht sichtbar sind bzw. nicht gespeichert werden.

himitsu 21. Aug 2006 02:31

Re: Datei platzsparend als Text speichern
 
uuencode müßte eine Base64-Variante sein (wenn ich mich recht erinnere) :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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