Autor Beitrag
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 21.12.04 20:09 
Ich habe mal irgentwo gelesen, dass es ein End-Of-Text zeichen gibt, welches dafür sorgt, das eine Datei ab diesem Zeichen nicht mehr als Text geladen wird. Es kommt anscheinend in Exe dateien oder JPGs vor, denn das Memo hört nach einigen Zeichen auf, durch Lines.LoadFromFile den Text zu laden. Das will ich verhindern. Kann ich irgentwie auf den gesammten inhalt einer JPG datei z.B. zugreifen, und ihn behandeln, als wäre er ein String oder eine Stringlist oder eben etwas ähnliches?

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 21.12.04 20:17 
Darstellen in einem Memo wirst du eine binär Datei nur können, wenn du alle Steuerzeichen in darstellbare Zeichen umwandelst. So bal das memo auf ein #0 trifft ist Ende, da das String Ende Zeichen ist. In eine Stringliste könntets du es komplett reinbekommen. Eventuell hilft dir auch mein HexLoader auf meiner Seite: www.luckie-online.de/Delphi/Sonstiges
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 21.12.04 20:43 
Danke erstmal,Luckie, ich habs mir angeguckt, und bemerkt, es wandelt jedes zeichen der datei in $+seinen hexwert+ ' ' um. das klappte auch gleich prima, aber ich möchte einich nichts weiter, als die Zeichen der datei in einer Variable speichern und dann irgentetwas machen, dass aus einer normal lesbaren JPG eine datei macht, die nur mein Programm selbst versteht.
Es würde schon reichen, die letzten 100 zeichen ab zu spalten und in einer anderen datei zu speichern; mit dieser datei kann man dann nur etwas anfangen, wenn man weis, wie man die beiden dateien wieder zusammen zu bringen hat. Eenn ich wüsste, wie das geht, könnte ich ja auch zu komplizierterem übergehen, wie z.B. jedes 100ste zeichen rausnehmen und später wieder einsetzen. oder ähnliches.

Aber danke für deine Hilfe! Jetzt weis ich wenigstens, dass ich #0 nicht ohne weiteres darstellen kann... (ich wusste nicht, dass es vorkommt... dachte, es ist glecihbedeutend mit *nichts*, weil man einen tastendruck verhindern kann, wenn man key:=#0; setzt.)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 22.12.04 22:42 
JayEff hat folgendes geschrieben:
Jetzt weis ich wenigstens, dass ich #0 nicht ohne weiteres darstellen kann...

Hallo!
Wenn's um die Darstellung geht, versuche es so: Datei mit BlockRead einlesen und gleich die #0 durch zB. ' ' ersetzen und das ganze dann mit BlockWrite in eine temporäre Datei schreiben. Diese kannst du dann in ein Memo laden.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 23.12.04 02:58 
darum gehts mir aber doch garnicht. ich will blos die datei als variable benutzen können! vll kann man sie hexadezimal in einen array of integer laden? dazu muss ich mir noch mal die source von luckies programm ansehen...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 23.12.04 04:48 
galagher hat folgendes geschrieben:
Datei mit BlockRead einlesen und gleich die #0 durch zB. ' ' ersetzen und das ganze dann mit BlockWrite in eine temporäre Datei schreiben. Diese kannst du dann in ein Memo laden.
´
Das reicht nicht. Alle Steuerzeichen (0-30 oder war es 33) sind nicht darstellbar, die müsste er alle ersetzten. Aber ich habe eigentlich nicht verstanden, was er will. So wie ich das sehe will er es eigentlich doch gar nicht darstellen, da kann man das doch einfach in einen Puffer laden und dort die Daten direkt bearbeiten.
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 23.12.04 15:06 
Puffer! das hört sich nach dem an, was ich suche! hast du das in deiner source so geregelt? wenn ja - dann dürfte die frage beantwortet sein! wenn nein - könntest du mir kurz beschreiben, wie ich das mache?

Damit ichs richtig verstanden habe: wenn ich das so mache, dann habe ich eine Variable oder einen array, in dem die gesammte datei unverändert drin ist? das wäre genau das, was ich suche...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 23.12.04 19:17 
Luckie hat folgendes geschrieben:
Das reicht nicht. Alle Steuerzeichen (0-30 oder war es 33) sind nicht darstellbar

Das stimmt nicht, ich ersetzt nur #0, und es klappt! :mahn:
Ist aber ohnehin egal, wenn er es nicht darstellen will.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 23.12.04 20:47 
Ich habe mir jetzt einen Code (Konsolenanwendung) zusammengebastelt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
program Krypter;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  classes;

var
  Puffer:array of Byte;
  fs:TFileStream;
  x:string;
  i,bar,count,percent:integer;
label ende;
begin
try
//fs:=TFileStream.Create(ParamStr(1),fmOpenRead);
except
WriteLn('Ungueltige Parameter: '+ParamStr(1));
WriteLn('Bitte Taste druecken um das Programm zu beenden');
ReadLn;
exit;
end;
SetLength(Puffer,fs.Size);
fs.ReadBuffer(Puffer[0],fs.Size);
bar:=round(fs.Size/100);
count:=0;
percent:=0;
for i:=0 to length(Puffer) do
begin
  Puffer[i]:=65;
  Inc(count);
  if count=bar then
  begin
    count:=0;
    inc(percent);
    writeln('* '+IntToStr(percent));
  end;
end;
fs.Free;
fs:=TFileStream.Create(ParamStr(1)+'.kry',fmCreate);
fs.Write(Puffer,length(Puffer));
fs.Free;
readln;
end.


Mir ist klar, dass die Schleife zu nichts führt, da dem Puffer nur im element [0] etwas zugewiesen ist.. Ich würde in meinem kleinen beispiel hier gerne einfach jedes zeichen der datei einzeln mit einem a ersetzen. Dabei ist allerdings die Datei immer leer. Mir ist klar, dass da ein Fehler drin ist, mit dem Puffer[i]... aber wie schaffe ich das, jedes zeichen einzeln zu behandeln? kann ich denn nicht sowas wie in der art hier machen:

ausblenden Delphi-Quelltext
1:
2:
3:
for i:=0 to fs.Size do begin
fs.ReadBuffer(Puffer[i],1);
end;
, also dass ein Zeichen eingelesen wird. Dabei kommt allerdings ein Stream-Lesefehler raus, und außerdem denke ich, dass er nur das erste zeichen immer und immer wieder lesen würde. ich muss also versuchen, dem Programm zu sagen, er soll danach um 1 zeichen weiter gehen. wie mache ich das nun wieder??


edit: grade gemerkt, dass ich nir fs.size-1 in der schleife benutzen muss. jetzt fehlt noch die tatsache, dass er nix reinschreibt, in die erzeugte datei.

edit: Problem gefunden, hier der neue code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
program Krypter;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  classes;

var
  Puffer:array of Byte;
  fs:TFileStream;
  x:string;
  i,bar,count,percent:integer;
label ende;
begin
try
fs:=TFileStream.Create(ParamStr(1),fmOpenRead);
except
WriteLn('Ungueltige Parameter: '+ParamStr(1));
WriteLn('Bitte Taste druecken um das Programm zu beenden');
ReadLn;
exit;
end;
SetLength(Puffer,fs.Size);
for i:=0 to fs.Size-1 do begin
fs.ReadBuffer(Puffer[i],1);
end;
bar:=round(fs.Size/100);
count:=0;
percent:=0;
for i:=0 to length(Puffer) do
begin
  Puffer[i]:=byte(Puffer[i]+1);
  x:=x+char(Puffer[i]);
  Inc(count);
  if count=bar then
  begin
    count:=0;
    inc(percent);
    writeln('* '+IntToStr(percent));
  end;
end;
fs.Free;
fs:=TFileStream.Create(ParamStr(1)+'.kry',fmCreate);
for i:=0 to length(Puffer) do fs.Write(Puffer[i],1);
fs.Free;
readln;
end.


edit: irgentwas stimmt immernoch nicht. eine zurückverschlüsselte textdatei stimmt mit dem origial über ein, nicht aber eine binäre datei.

HILFE!

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 23.12.04 21:35 
Kannst du das mal irgendwie etwas leserlicher formatieren?
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 23.12.04 21:59 
Ich weis nicht, wie du das meinst.. ich kommentiers mal aus, damits nach was aussieht :D

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
program Krypter;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  classes;

var
  Puffer:array of Byte;
  fs:TFileStream;
  i,bar,count,percent:integer;
begin
try
  fs:=TFileStream.Create(ParamStr(1),fmOpenRead); //die datei die per parameter übergebenwurde, laden.
except
  WriteLn('Ungueltige Parameter: '+ParamStr(1));
  WriteLn('Bitte Taste druecken um das Programm zu beenden');
  ReadLn;
  exit;
end;
SetLength(Puffer,fs.Size);
for i:=0 to fs.Size-1 do
begin
  fs.ReadBuffer(Puffer[i],1);//Zeichen für Zeichen in den Puffer laden
end;
bar:=round(fs.Size/100);//Eine art Progressbar berechnen
count:=0;
percent:=0;
for i:=0 to length(Puffer) do
begin
  Puffer[i]:=((Puffer[i]+1)mod 255);//#255 -> #0 ... #200 -> #201
  Inc(count);
  if count=bar then
  begin
    count:=0;
    inc(percent);
    writeln('* '+IntToStr(percent)+'%');//Die "Progressbar" zeichnen..(gäbe bessere möglichkeiten...
  end;
end;
fs.Free;
fs:=TFileStream.Create(ParamStr(1)+'.kry',fmCreate);//neue Datei erstellen
for i:=0 to length(Puffer) do fs.Write(Puffer[i],1);//Die neue Datei mit dem Pufferfüllen..
fs.Free;
readln;
end.


Ich hoffe, das half...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 28.12.04 14:52 
Hallo!

Ich habe mir nun nicht alles hier durchgelesen, gebe aber trotzdem meinen Senf dazu! :)

Das Steuerzeichen 26 ($1A) bedeutet "End of File" und bewirkt genau das beschriebene. Es muss, um die Datei mit Lines.LoadFromFile oder per Assign/Reset/Readln komplett einzulesen, entfernt bzw. geändert werden.

Cu,
Udontknow