![]() |
[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 ![]() Ich speichern die Daten auf folgende Weise ab:
Code:
Allerdings stehen dann in der Textdatei nur Fragezeichen. Liegt das an der Zeichenkodierung?
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; 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. |
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:
Die Textdatei sieht dann irgendwie so aus: 12;58;499;34;
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); Beim späteren Einlesen kannst du die Zahlen mit Chr(Zahl) wieder zu Zeichen machen. |
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? |
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. |
AW: Speichern von RCx-Zeichen in Textdatei
Danke erstmal für die ganzen Antworten.
Zitat:
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. |
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; |
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. |
AW: Speichern von RCx-Zeichen in Textdatei
?welchen I/O-error?
mit welchem Source? Gruß K-H |
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. |
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: ![]() Ich weiß nicht was das Programm mir da liefert. So ist das Folgende auch recht merkwürdig: ![]() So sieht mein Code momentan aus... Speichern der Eingabe (EditFeld: OutputCrypt):
Code:
Auslesen der Daten + Einfügen in Ausgabefeld (EditFeld: OutputDecrypt):
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;
Code:
Kann mir da vielleicht einer helfen und sagen was ich falsch mache?
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; 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:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz