AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [Erledigt] Speichern von RCx-Zeichen in Textdatei
Thema durchsuchen
Ansicht
Themen-Optionen

[Erledigt] Speichern von RCx-Zeichen in Textdatei

Ein Thema von Root2k · begonnen am 16. Jun 2011 · letzter Beitrag vom 17. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#1

[Erledigt] Speichern von RCx-Zeichen in Textdatei

  Alt 16. Jun 2011, 15:16
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.

Geändert von Root2k (17. Jun 2011 um 12:31 Uhr)
  Mit Zitat antworten Zitat
fui-tak

Registriert seit: 24. Okt 2008
117 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 16. Jun 2011, 15:29
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.

Geändert von fui-tak (16. Jun 2011 um 15:32 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 16. Jun 2011, 15:40
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?

Geändert von blackfin (17. Jun 2011 um 09:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 16. Jun 2011, 15:57
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#5

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 08:59
Danke erstmal für die ganzen Antworten.

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.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 09:09
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;

Geändert von blackfin (17. Jun 2011 um 09:16 Uhr)
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#7

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 09:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 10:22
?welchen I/O-error?
mit welchem Source?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#9

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 11:01
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.
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#10

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 12:13
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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