AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo.Text := Ansistring? nur wie

Ein Thema von emsländer · begonnen am 7. Jan 2009 · letzter Beitrag vom 7. Jan 2009
Antwort Antwort
Seite 3 von 3     123   
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#21

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 19:35
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)
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#22

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 19:37
Zitat von jbg:
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


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#23

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 19:58
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;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#24

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 20:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#25

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 20:20
Zitat von jbg:
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


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#26

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 20:42
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;
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#27

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 20:50
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


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 13:38 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