AGB  ·  Datenschutz  ·  Impressum  







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

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

Ein Thema von Neutral General · begonnen am 20. Okt 2009 · letzter Beitrag vom 20. Okt 2009
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

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

  Alt 20. Okt 2009, 17:41
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 20. Okt 2009, 17:43
String[n] definiert auch in Delphi 2009 und den folgenden noch einen Ansistring. Shortstrings gibt es nicht mit Unicode-Chars.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 20. Okt 2009, 17:46
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 20. Okt 2009, 17:52
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

Aber das Gegenteil ist ja scheinbar von Natur aus der Fall

Wobei ich das fast schon verwirrend finde... String = Unicode, String[n] = Ansi
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 20. Okt 2009, 18:00
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


schade daß die Generics nur Typen und keine Konstanten annehmen,
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:43 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