Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi [Erledigt] Speichern von RCx-Zeichen in Textdatei (https://www.delphipraxis.net/161100-%5Berledigt%5D-speichern-von-rcx-zeichen-textdatei.html)

Root2k 16. Jun 2011 15:16


[Erledigt] Speichern von RCx-Zeichen in Textdatei
 
Hi,

ich wollte mal fragen ob mir jemand sagen kann wie ich die umgewandelten/zurückgegebenen Zeichen (z.B. 황暫ꮃ审湆�꡻椎ꫡ) einer http://www.delphipraxis.net/140859-r...uesselung.html in einer Textdatei abspeichern und wieder auslesen kann.

Ich speichern die Daten auf folgende Weise ab:

Code:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
  Datei: TextFile;

begin
  AssignFile(Datei,'d:\tmp.txt');
  Rewrite(Datei);
  if IOResult = 0 then
  begin
    writeln(Datei, OutputCrypt.Text);
    CloseFile(Datei);
  end;

end;
Allerdings stehen dann in der Textdatei nur Fragezeichen. Liegt das an der Zeichenkodierung?

Kann mir vielleicht einer sagen wie ich die Zeichen richtig abspeichern kann?
Bin noch ziemlich neu in der Delphi-Programmierung (und diesem Board) und kenn mich deshalb auch noch nicht so gut aus.


Gruß,
Root2k

PS: Ich hoffe dass ich den richtigen Bereich gewählt hab.

fui-tak 16. Jun 2011 15:29

AW: Speichern von RCx-Zeichen in Textdatei
 
Ich denke es könnte gehen, indem du die zu den Zeichen zugehörigen Unicode-Zahlen, statt den Zeichen selbst, abspeicherst.
Delphi-Quellcode:
vers, ausg: string;
i: integer;
...

vers := OutputCrypt.Text;
ausg := '';

for i := 0 to length(vers) -1 do
   ausg := ausg + Ord(vers[i]) + ';';

...
writeln(Datei, ausg);
Die Textdatei sieht dann irgendwie so aus: 12;58;499;34;

Beim späteren Einlesen kannst du die Zahlen mit Chr(Zahl) wieder zu Zeichen machen.

blackfin 16. Jun 2011 15:40

AW: Speichern von RCx-Zeichen in Textdatei
 
Vorsicht, fui-tak, das geht in die Hose:
ord und chr funktionieren nur bei einem Wertebereich von 0-255, also nur bei ANSI-Chars, bei UniCode-Zeichen dagegen, die über diesem Wertebereich liegen, knallt es.
Also ist das defintiv nicht der Weg zu gehen.


Edit: Uhm...da habe ich mich wohl getäuscht. Danke für den Hinweis, Himitsu. Aber merkwürdig, ich war mir egentlich sicher, dass ich mal eine Grenzenverletzung hatte von ord / chr bei Unicode-Zeichen (D2009)...hmm

Aber, bevor ich evtl. Speicher-Möglichkeiten beschreibe:
Welche Delphi-Version benutzt du, Root2k?

himitsu 16. Jun 2011 15:57

AW: Speichern von RCx-Zeichen in Textdatei
 
Ord und Chr (nicht Char) sind virtuelle Funktionen

Chr = erstellt einen Char und nimmt jeden Integertypen an
Ord = erstellt einen Integer und nimmt AnsiChar, WideChar/Char und andere ordinale Typen, wie z.B. ENUMs entgegen.

Und ja, die beiden "Funktionen" verstehen auch Unicode.

Den Text binär in einen Stream und darüber abspeichern.

Die so kodierten Daten sind nunmal kein "Text" mehr und enthalten (auf Text/Strings bezogen ) Steuerzeichen und eventuell Zeichen, welche je nach Zeichensatz unterschiedlich interpretiert werden.

Root2k 17. Jun 2011 08:59

AW: Speichern von RCx-Zeichen in Textdatei
 
Danke erstmal für die ganzen Antworten.

Zitat:

Zitat von blackfin (Beitrag 1106828)
Welche Delphi-Version benutzt du, Root2k?

Sorry, hab ich vergessen in meinem Profil anzugeben.
Ich programmiere mit Delphi XE (Enterprise).

Danke auch für den Hinweis mit Ord und Chr. Ich probiere jetzt auf jeden Fall mal aus was ich damit alles anstellen kann.

blackfin 17. Jun 2011 09:09

AW: Speichern von RCx-Zeichen in Textdatei
 
Schreibe die Datei doch einfach über einen Stream:

Delphi-Quellcode:
procedure Save(CryptText: string; OutFileName: string);
var
  FStream: TStream;
begin
  ForceDirectories(ExtractFilePath(OutFileName)) ;
 
  if FileExists(OutFileName) then
  begin
   FStream := TFileStream.Create(OutFileName,fmOpenReadWrite) ;
   FStream.Seek(0,soFromEnd) ;
  end
  else
   FStream := TFileStream.Create(OutFileName,fmCreate) ;
 
  FStream .Write(Pointer(CryptText)^,Length(CryptText)* SizeOf(Char)) ;
  FreeAndNil(FStream) ;
end;

Root2k 17. Jun 2011 09:46

AW: Speichern von RCx-Zeichen in Textdatei
 
Ok, werde ich auf jeden Fall mal probieren.
Das hab ich vorher auch schon mal (in leicht abgeänderter Version) versucht, aber ich hab immer einen I/O-Error erhalten.

Ich schau mal was ich hinbekomme und meld mich hier dann nochmal.

p80286 17. Jun 2011 10:22

AW: Speichern von RCx-Zeichen in Textdatei
 
?welchen I/O-error?
mit welchem Source?

Gruß
K-H

Root2k 17. Jun 2011 11:01

AW: Speichern von RCx-Zeichen in Textdatei
 
Das kann ich dir jetzt leider nicht mehr so genau sagen.
Ich denke aber dass das Problem folgendes war:
Ich hab den Zugriff auf die Datei vermutlich nicht an der richtigen Stelle geschlossen und somit wollte das Programm von 2 Stellen auf eine Datei zugreifen. Das hat vermutlich die Probleme verursacht. Da gab es dann immer eine Zugriffsverletzung.

Jetzt scheint das Ganze aber zu funktionieren.
Ist zwar noch nicht zu 100% perfekt aber ich taste mich ran.

Root2k 17. Jun 2011 12:13

AW: Speichern von RCx-Zeichen in Textdatei
 
Ich bekomm das irgendwie nicht richtig zum laufen, denn ich bekomme folgende Resultate bei entsprechender Eingabe (ist egal ob ich Buchstaben oder Zahlen eingebe):

Eingabe: 1
Ausgabe: 1

Eingabe: 11
Ausgabe: 11se
Zusätzlich komisch: Wenn ich z.B. in den Browser klicke und dann nochmal die Daten auslesen lasse (Button klicke), erhalte ich die Ausgabe: 11껀Ȝ

Eingabe: 111
Ausgabe: 111en
Zusätzlich komisch: Wenn ich z.B. in den Browser klicke und dann nochmal die Daten auslesen lasse (Button klicke), erhalte ich die Ausgabe: 111Ȝ�Ȟ

Eingabe: 1111
Ausgabe: 1111cher
Zusätzlich komisch: Wenn ich z.B. in den Browser klicke und dann nochmal die Daten auslesen lasse (Button klicke), erhalte ich die Ausgabe: 1111�Ȟ

usw.

Bei der Eingabe von 8 Zeichen sieht das dann plötzlich so aus:

http://img4.fotos-hochladen.net/uploads/16oix2uetnq.jpg

Ich weiß nicht was das Programm mir da liefert.
So ist das Folgende auch recht merkwürdig:

http://img4.fotos-hochladen.net/uploads/2hazy8pc546.jpg

So sieht mein Code momentan aus...

Speichern der Eingabe (EditFeld: OutputCrypt):
Code:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
  FStream: TStream;
  const OutFileName: string = 'd:\tmp.txt';
begin
  ForceDirectories(ExtractFilePath(OutFileName)) ;
  FStream := TFileStream.Create(OutFileName,fmCreate) ;
  FStream.Write(Pointer(OutputCrypt.Text)^,Length(OutputCrypt.Text)* SizeOf(Char)) ;
  FreeAndNil(FStream) ;
end;
Auslesen der Daten + Einfügen in Ausgabefeld (EditFeld: OutputDecrypt):
Code:
procedure TForm1.BtnReadClick(Sender: TObject);

var
  InputFile: TFileStream;
  TmpText: String;

const
  outFileName: string = 'd:\tmp.txt';

begin
  InputFile := TFileStream.Create(outFileName, fmOpenRead);
  try
    SetLength(TmpText, InputFile.Size);
    InputFile.Read(TmpText[1], InputFile.Size);
  finally
    InputFile.Free;
  end;
  OutputDecrypt.Text := TmpText;
end;
Kann mir da vielleicht einer helfen und sagen was ich falsch mache?

Die Daten scheinen übrigens korrekt in der TXT-Datei zu stehen. Da steht also kein "w64\kernel32.dll" und sowas drin.

PS: Wie schon gesagt... ich bin noch ein NewBe was Delphi angeht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Seite 1 von 2  1 2      

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