Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Explizit nach String[20] casten? (https://www.delphipraxis.net/192306-explizit-nach-string%5B20%5D-casten.html)

hzzm 7. Apr 2017 09:01

Delphi-Version: 10 Seattle

Explizit nach String[20] casten?
 
Ich bin gerade dabei meine Fehler "Implizite String-Umwandlung" auszumerzen.

Dabei bin ich auf eine Zuweisung gestossen, bei der ich explizit nach String[20] casten muss.
Ich kenne die Syntax dafuer aber nicht und die Suche nach der Information gestaltet sich etwas schwierig.
Code:
var
  Name: String[20];
begin
  //...
  Name := TEdit(Sender).Text;
Ich braeuchte sowas wie
Code:
Name := String[20](TEdit(Sender).Text);
um explizit zu casten.
Eine Abweichung von String[20] ist keine Option.

Danke!

Bernhard Geyer 7. Apr 2017 09:05

AW: Explizit nach String[20] casten?
 
ist nicht ein Short-String ein Ansistring?

Delphi-Quellcode:
  Name := AnsiString(TEdit(Sender).Text);

Klaus01 7. Apr 2017 09:09

AW: Explizit nach String[20] casten?
 
.. was soll passieren wenn der Text im Edit länger als 20 Zeichen ist? Kürzen des Textes?
.. was soll passieren wenn der Text im Edit kürzer als 20 Zeichen ist? Padding?

Grüße
Klaus

Uwe Raabe 7. Apr 2017 09:14

AW: Explizit nach String[20] casten?
 
Zitat:

Zitat von Klaus01 (Beitrag 1366731)
.. was soll passieren wenn der Text im Edit kürzer als 20 Zeichen ist? Padding?

Wieso? Ein String[20] muss ja nicht zwingend 20 Zeichen haben. Das ist lediglich der Maximalwert.

hzzm 7. Apr 2017 09:19

AW: Explizit nach String[20] casten?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1366730)
ist nicht ein Short-String ein Ansistring?

Delphi-Quellcode:
  Name := AnsiString(TEdit(Sender).Text);

Vielen Dank, das funktioniert.
Zitat:

Zitat von Klaus01 (Beitrag 1366731)
.. was soll passieren wenn der Text im Edit länger als 20 Zeichen ist? Kürzen des Textes?
.. was soll passieren wenn der Text im Edit kürzer als 20 Zeichen ist? Padding?

1. Abschneiden
2. Gar nix, das gleiche wie wenn ein ShortString kuerzer als 255 Zeichen ist

p80286 7. Apr 2017 11:03

AW: Explizit nach String[20] casten?
 
Eigenmtlich benötigt man Shortstrings oder
Delphi-Quellcode:
var
  mystring:string[x];
nur wenn man irgendwelche Tricksereien durchführen möchte. Das geht von
Delphi-Quellcode:
for i:=1 to Byte(mystring[0]) do {statt length()
bis zu
Delphi-Quellcode:
mystring[0]:=0 {statt ''}
oder man muß mit fixen Satzlängen/Stringlängen arbeiten aber da bevorzuge ich das
Delphi-Quellcode:
mycharray:array [1..x] of ansichar {/char}
Gruß
K-H

hzzm 7. Apr 2017 11:20

AW: Explizit nach String[20] casten?
 
Ja, leider benoetige ich String[20] fuer exotische Tricksereien.
Der String[20] ist in einem packed Record, der als Objekt in einen zLib CompressionStream -> uTPLb_CryptographicLibrary EncryptionStream -> File fliesst.
Die Kompression->Verschluesselung benoetigt Arrays mit fester Laenge in Record; Da ich Millionen dieser Mini-Dateien (ein paar hundert Bytes pro) speichern muss, kann ich keine vollen Datentypen benutzen, da sonst die FileSize der Dateien ununoetig in die Hoehe getrieben wird.

himitsu 7. Apr 2017 11:44

AW: Explizit nach String[20] casten?
 
Man kann sich auch selber einen Record-String bastelt.
Delphi-Quellcode:
x: array[0..x] of WideChar
// WideChar oder AnsiChar, wegen fester größe bei der Übertragung
Delphi kann da zeilweise automatisch zwischen String und diesem Array konvertieren.

Das ganze pappt man dann noch in einen Record, batelt implizite Casts von/zu String dran
und kann dann intern in AnsiChar z.B. als UTF8 speichern.


Alternativ:
TPersistent nehmen
da als Property seine Daten rein
und dieses Datenobject lässt sich dann einfach mit Systemmitteln in einen Stream serialisieren und wieder deserialisieren,
was dann auch mit dynamischer Länge funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 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