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
Root2k

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

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
 
#2

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
 
#3

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
 
#4

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
 
#5

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
 
#6

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
Benutzerbild von himitsu
himitsu

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

AW: Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 12:20
AnsiString = 1 Byte pro Zeichen
WideString/UnicodeString = 2 byte pro Zeichen
String = SizeOf(Char) Byte pro Zeichen

Also mußt du nur noch Umrechnen, wo Byte und Chars vermischt wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: [Erledigt] Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 12:51
Zitat:
Delphi-Quellcode:
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)) ; // Chars + Chars = OK
  FreeAndNil(FStream); // nicht nötig, da die Variable eh gleich weggeworfen wird
  // kein Ressourcenschutzblog?
end;

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); // Chars + Bytes = Fehler
    InputFile.Read(TmpText[1], InputFile.Size); // Bytes + Bytes = OK
  finally
    InputFile.Free;
    // hier gibt es einen :)
  end;
  OutputDecrypt.Text := TmpText;
end;



Delphi-Quellcode:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
  FStream: TStream;
  TmpText: String;
const
  OutFileName: string = 'd:\tmp.txt';
begin
  ForceDirectories(ExtractFilePath(OutFileName)) ;
  FStream := TFileStream.Create(OutFileName,fmCreate) ;
  try
    TmpText := OutputCrypt.Text;
    if TmpText <> 'then
      FStream.Write(TmpText[1], Length(TmpText) * SizeOf(Char)) ;
  finally
    FStream.Free;
  end;
end;

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 div SizeOf(Char));
    if TmpText <> 'then
      InputFile.Read(TmpText[1], Length(TmpText) * SizeOf(Char));
  finally
    InputFile.Free;
  end;
  OutputDecrypt.Text := TmpText;
end;
Du solltest dich auf eine Art der Fehlerbehandlung, bzw. des Ressourcenschutzes einigen
und an der richtigen Stelle umrechnen, denn Length(OutputCrypt.Text)* SizeOf(Char)*2 war die falsche Stelle.

Wenn das Schreiben nicht dem Lesen ähnelt, dann ist da irgendwas falsch, bzw. das Konzept stimmt nicht.

PS: Besser ReadBuffer und WriteBuffer, statt Read und Write verwenden, wenn du schon dessen Rückgabewerte nicht prüfst.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Jun 2011 um 12:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:51 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-2025 by Thomas Breitkreuz