Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo.Text := Ansistring? nur wie (https://www.delphipraxis.net/127085-memo-text-%3D-ansistring-nur-wie.html)

jbg 7. Jan 2009 18:35

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
var _codiert : string;

Und da haben wir den Übeltäter.

EncodeString liefert einen (kodierten) AnsiString zurück. Mit der Zuweisung an _codiert, werden nun Zeichen größer #127 falsch umgesetzt. Und beim Schreiben in die Datei wird nur die Hälfte der Daten geschrieben: Length(_codiert) <> ByteLength(_codiert)

emsländer 7. Jan 2009 18:37

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
var _codiert : string;

Und da haben wir den Übeltäter.

EncodeString liefert einen (kodierten) AnsiString zurück. Mit der Zuweisung an _codiert, werden nun Zeichen größer #127 falsch umgesetzt. Und beim Schreiben in die Datei wird nur die Hälfte der Daten geschrieben: Length(_codiert) <> ByteLength(_codiert)

Abhilfe? - ich muss vor allem die Bestandsdaten lesen können!

Gruss

EL

jbg 7. Jan 2009 18:58

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
Abhilfe? - ich muss vor allem die Bestandsdaten lesen können!

Also alles was du mit der Delphi 2009 Version geschrieben hast, ist verstümmelt. Da kann man nichts mehr machen, da die Hälfte der Daten fehlt.
Was du mit Delphi 1-2007 geschrieben hast, kannst du komplett über AnsiString abhandeln.


Für das Schreiben reicht es aus, wenn du _codiert als AnsiString deklarierst. Du solltest aber noch prüfen, ob die Daten, die aus dem StringStream zurück kommen auch richtig sind (bei Indy bin ich mir nicht sicher, was die intern so alles mit den Daten anstellen)
Delphi-Quellcode:
uses
  JclStrings;

var
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
begin
  ...
  _codiert := JvCaesarcipher.EncodeString(fddschl, AnsiString(sfiledata));
  StringToFile(sTmpFileName, _codiert);
end;

Beim Lesen darft du erst in einen UnicodeString konvertieren, wenn die Daten bereits entschlüsselt sind:

Delphi-Quellcode:
uses
  JclStrings;


var
  Stream: TFileStream;
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
begin
  _codiert := FileToString(odlg.FileName);
  sfiledata := string(JvCaesarcipher.DecodeString(fddschl, _codiert));

  Memo1.Lines.Text := sfiledata;
end;

jbg 7. Jan 2009 19:00

Re: Memo.Text := Ansistring? nur wie
 
Kann es sein, dass du sämtliche String-Warnungen abgeschaltet hast? Denn der Compiler wirft überall, wo du eine implizite Konvertierung von UnicodeString nach AnsiString und andersherum machst, eine Warnung.

emsländer 7. Jan 2009 19:20

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
Abhilfe? - ich muss vor allem die Bestandsdaten lesen können!

Also alles was du mit der Delphi 2009 Version geschrieben hast, ist verstümmelt. Da kann man nichts mehr machen, da die Hälfte der Daten fehlt.
Was du mit Delphi 1-2007 geschrieben hast, kannst du komplett über AnsiString abhandeln.


Für das Schreiben reicht es aus, wenn du _codiert als AnsiString deklarierst. Du solltest aber noch prüfen, ob die Daten, die aus dem StringStream zurück kommen auch richtig sind (bei Indy bin ich mir nicht sicher, was die intern so alles mit den Daten anstellen)
Delphi-Quellcode:
uses
  JclStrings;

var
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
begin
  ...
  _codiert := JvCaesarcipher.EncodeString(fddschl, AnsiString(sfiledata));
  StringToFile(sTmpFileName, _codiert);
end;

Beim Lesen darft du erst in einen UnicodeString konvertieren, wenn die Daten bereits entschlüsselt sind:

Delphi-Quellcode:
uses
  JclStrings;


var
  Stream: TFileStream;
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
begin
  _codiert := FileToString(odlg.FileName);
  sfiledata := string(JvCaesarcipher.DecodeString(fddschl, _codiert));

  Memo1.Lines.Text := sfiledata;
end;

Auch das klappt leider nicht so wie es soll. Er liest zwar mehr ein als vorher, aber Source ist nicht identisch mit Destination. Kommt nur Müll bei rum.
Vor dem decodieren sieht der codierte String ganz gut aus....
Zitat:

Kann es sein, dass du sämtliche String-Warnungen abgeschaltet hast? Denn der Compiler wirft überall, wo du eine implizite Konvertierung von UnicodeString nach AnsiString und andersherum machst, eine Warnung.
nein - ich ignoriere Warnungen gern.


Gruss EL

jbg 7. Jan 2009 19:42

Re: Memo.Text := Ansistring? nur wie
 
Also folgender Code funktioniert bei mir:

Delphi-Quellcode:
var
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
  fddschl: string;
  sTmpFileName: string;
begin
  sTmpFileName := 'C:\Testdata\Test.txt'; // *** anpassen ***

  sfiledata := '<xml>'#10'Hallo du Ärger'#10'</xml>';
  fddschl := '12';

  // write
  _codiert := JvCaesarcipher.EncodeString(fddschl, AnsiString(sfiledata));
  StringToFile(sTmpFileName, _codiert);


  // read
  _codiert := FileToString(sTmpFileName);
  sfiledata := string(JvCaesarcipher.DecodeString(fddschl, _codiert));

  Memo1.Lines.Text := sfiledata;
end;

emsländer 7. Jan 2009 19:50

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Also folgender Code funktioniert bei mir:

Delphi-Quellcode:
var
  _codiert: AnsiString;
  sfiledata: string; // = UnicodeString
  fddschl: string;
  sTmpFileName: string;
begin
  sTmpFileName := 'C:\Testdata\Test.txt'; // *** anpassen ***

  sfiledata := '<xml>'#10'Hallo du Ärger'#10'</xml>';
  fddschl := '12';

  // write
  _codiert := JvCaesarcipher.EncodeString(fddschl, AnsiString(sfiledata));
  StringToFile(sTmpFileName, _codiert);


  // read
  _codiert := FileToString(sTmpFileName);
  sfiledata := string(JvCaesarcipher.DecodeString(fddschl, _codiert));

  Memo1.Lines.Text := sfiledata;
end;

jo - scheint wohl zu klappen --- ich hatte da noch ne Wanze drin... (der alte Code war unter dem neuen und hat das überschrieben)

Ich mache noch ein paar Tests - Tests haben funktioniert. Alles Bestens!

Vielen Dank für Deine Hilfe

Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.
Seite 3 von 3     123   

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