Einzelnen Beitrag anzeigen

Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#4

AW: Paradox spezielle Datentypen laden

  Alt 19. Feb 2021, 08:33
Und so geht das nicht?
Delphi-Quellcode:
  SetLength(Bytes, ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).Size);
  ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).GetData(Bytes);
  Stream := TMemoryStream.Create();
  Stream2 := TStringStream.Create([]); // evtl muss hier noch das Encoding mit angegeben werden
  //Stream2 := TStringStream.Create('', TEncoding.UTF8, False);
  try
    Stream.Write(Bytes, Length(Bytes));
    Stream.Position := 0;
    //Stream2.Position := 0; // evtl?
    Stream2.LoadFromStream(Stream);
    //Stream.Position := 0; evtl?
    //Stream2.Position := 0; // evtl?
    Stream2.DataString := Stream2.DataString + ';'; // Hinweis A
    Stream2.SaveToFile(ExportFile);
  finally
    FreeAndNil(Stream);
    FreeAndNil(Stream2);
  end;
Ich denke, wenn du Bytes ausliest und nur in eine Datei schreibst müsste das Encoding egal sein.
Nur wenn du mit DataString tatsächlich das ganze in Delphi irgendwo verwenden willst,
müsstest du auch mit dem richtigen Encoding arbeiten. Dazu musst du wissen, mit welchem
Encoding die Daten gespeichert wurden.

Hinweis A: An der Stelle arbeitest du mit dem DataString. Du fügst dass "Semikolon" den
eigendlichen Daten hinzu. Je nachdem mit welchem Encoding du arbeitest, könnten den Daten
nun (beispielsweise) 1 Byte oder 2 Byte hinzugefügt werden. Daher müsstest du wissen,
welches Encoding vorliegt. ... Um genau zu sein denke ich sogar, dass bei falschem Encoding
das Auslesen und Schreiben Stream2.DataString := Stream2.DataString; bereits die Daten schon zerstören können. Oder du bekommst eine Fehlermeldung,
dass da ein Zeichen in den Bytes ist, was vom Encoding nicht unterstützt wird.

Solange Delphi (und da weiß ich jetzt nicht, wie das genau gelöst ist bei TStringStream)
intern beim LoadFromStream, SaveToFile, usw. nur mit den Bytes arbeitet wäre
das Encoding für diese Routinen halt egal. Theoretisch braucht man das Encoding ja nur
um eine Representation als String zu erhalten, vorher nicht.

(Ich hoffe ich erzähle nicht allzugroßen Unsinn, aber so hatte ich das wenigstens verstanden.
Ich bin jetzt auch kein Guru, was Encodings angeht! )

LG Incocnito
  Mit Zitat antworten Zitat