Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi2009+ --> (Ansi)String[n] (https://www.delphipraxis.net/142011-delphi2009-ansi-string%5Bn%5D.html)

Neutral General 20. Okt 2009 17:41


Delphi2009+ --> (Ansi)String[n]
 
Hi,

Man kann ja ShortStrings mit einer bestimmten Länge definieren. Z.B.

Delphi-Quellcode:
var
  string2: String[2];
Allerdings funktioniert folgendes nicht:

Delphi-Quellcode:
var
  string2: AnsiString[2];
Gibt es da irgendetwas äquivalentes? Bei einem Array[0..1] of AnsiChar ist das Problem, dass man diesem Typ nicht direkt
einen String zuordnen kann.

Gruß
Neutral General

Apollonius 20. Okt 2009 17:43

Re: Delphi2009+ --> (Ansi)String[n]
 
String[n] definiert auch in Delphi 2009 und den folgenden noch einen Ansistring. Shortstrings gibt es nicht mit Unicode-Chars.

himitsu 20. Okt 2009 17:46

Re: Delphi2009+ --> (Ansi)String[n]
 
jupp, String/AnsiString/WideString/UnicodeString sind dynamische Arrays

String[n] und ShortString sind statische Arrays

String[x] entspricht da
Delphi-Quellcode:
type
  MyShortString = packed record
    Len: Byte; // entspricht Data[0]
    Data: array[1..x] of AnsiChar;
  end;
und ein ShortString ist String[255]


wenn du unbedingt einen ShortString-artigen Typen haben willst, welcher Unicode kann, dann bastel dir einen aus 'nem Record ;)

Neutral General 20. Okt 2009 17:52

Re: Delphi2009+ --> (Ansi)String[n]
 
Zitat:

Zitat von himitsu
wenn du unbedingt einen ShortString-artigen Typen haben willst, welcher Unicode kann, dann bastel dir einen aus 'nem Record ;)

Ich will ja genau das Gegenteil :mrgreen:

Aber das Gegenteil ist ja scheinbar von Natur aus der Fall :)

Wobei ich das fast schon verwirrend finde... String = Unicode, String[n] = Ansi :?

himitsu 20. Okt 2009 18:00

Re: Delphi2009+ --> (Ansi)String[n]
 
verwirrend ist es nur, weil EmCoBo unbedingt einem den Umstieg leicht machen wollte
und das möglichst ohne viel ändern zu müssen ... für ein Neuschreiben von Code finde ich das allerdings voll schrottig gelößt.

das normale AnsiSameStr ist in D2009 übrigens auch Unicode und nicht Ansi
usw.

PS: es gibt auch noch String(n) als Typen ... das gibt dann 'ne Art Codierung an :wall:


schade daß die Generics nur Typen und keine Konstanten annehmen, :cry:
sonst ginge die zweie Definition auch
Delphi-Quellcode:
Type
  TWideShortString255 = packed Record
  Private
    _Data: Array[0..255] of WideChar;
    Function GetData(i: Word):  WideChar; Inline;
    Procedure SetData(i: Word; C: WideChar); Inline;
    Function GetLen:   Word;              Inline;
    Procedure SetLen (i: Word);             Inline;
  Public
    Property Data[Index: Word]: WideChar Read GetData Write SetData; Default;
    Property Len:              Word    Read GetLen Write SetLen;
  End;

  TWideShortString<Size> = packed Record
  Private
    _Data: Array[0..Size] of WideChar;
    Function GetData(i: Byte):  WideChar;
    Procedure SetData(i: Byte; C: WideChar);
    Function GetLen:   Byte;
    Procedure SetLen (i: Byte);
  Public
    Property Data[Index: Byte]: WideChar Read GetData Write SetData; Default;
    Property Len:              Byte    Read GetLen Write SetLen;
  End;

Function TWideShortString255.GetData(i: Word): WideChar;
  Begin
    Result := _Data[i];
  End;

Procedure TWideShortString255.SetData(i: Word; C: WideChar);
  Begin
    _Data[i] := C;
  End;

Function TWideShortString255.GetLen: Word;
  Begin
    Result := Word(_Data[0]);
  End;

Procedure TWideShortString255.SetLen(i: Word);
  Begin
    _Data[0] := WideChar(i);
  End;

// Achtung: ohne Fehlerbehandlung


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