AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Array of String als Konstante klappt nicht...

Array of String als Konstante klappt nicht...

Ein Thema von stho · begonnen am 26. Mär 2010 · letzter Beitrag vom 15. Dez 2019
Antwort Antwort
Seite 2 von 2     12
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#1

Re: Array of String als Konstante klappt nicht...

  Alt 1. Apr 2010, 12:15
Zitat von himitsu:
Das Einzige was möglich ist, ware eine dynamische Array-Variable nachträglich mit dem Inhalt einer statischen Array-Konstante zu belegen.
Da ich das gerade brauche: gibt es da einer Möglichkeit, das in einem Rutsch zu erledigen ála:
dynarray:= staticArray;
(Dass dieser Weg nicht geht, hab ich schon gemerkt
Ansonsten muss ich das statischen eben durchlaufen.
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Array of String als Konstante klappt nicht...

  Alt 1. Apr 2010, 13:17
Geht copy() nicht?
  Mit Zitat antworten Zitat
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Array of String als Konstante klappt nicht...

  Alt 1. Apr 2010, 13:34
Ne leider nicht. Mit Copy() kann man nur von dynamischen Arrays kopieren, nicht aber auf
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Re: Array of String als Konstante klappt nicht...

  Alt 5. Dez 2019, 18:23
Weil ich's grade sehe.

Gab es nicht irgendwo einen Array-Helper (paar mal gesehn, aber immer wenn ich es suche, dann finde ich nichts ),
der ein OpenArray (array of T) als Parameter entgegen nimmt und ein dynmaisches TArray<T> zurück gibt?
Bei OpenArrays kann man alle Array-Typen reingeben und der Compiler kopiert notfalls automatisch um.

Drinnen in dem Helper wäre dann aber auch wieder nur der StandardCode:
* SetLength und dann umkopieren der Items
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Re: Array of String als Konstante klappt nicht...

  Alt 6. Dez 2019, 01:21
Gab es nicht irgendwo einen Array-Helper (paar mal gesehn, aber immer wenn ich es suche, dann finde ich nichts ),
der ein OpenArray (array of T) als Parameter entgegen nimmt und ein dynmaisches TArray<T> zurück gibt?
Bei OpenArrays kann man alle Array-Typen reingeben und der Compiler kopiert notfalls automatisch um.

Drinnen in dem Helper wäre dann aber auch wieder nur der StandardCode:
* SetLength und dann umkopieren der Items
Öff... nicht dass ich wüsste. Dürfte aber kein Hexenwerk sein...

Bezüglich array of const gibt es meines Wissens nach auch keine vorgefertigte Lösung, aber auch das lässt sich relativ einfach realisieren. (function (A: array of const): TArray<TVarRec> begin Pointer(Result) := Pointer(A); end )

Bei Strings ginge ja sowas wie String.Join(',', MyArrayOfConst).Split(',') , und bei anderen Typen muss man halt immer vorsichtig sein, da sie ja nicht alle Typen eines TVarRec-Objekts darstellen können. Andersherum wäre das ja, wie du sagst, eh implizit möglich.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Re: Array of String als Konstante klappt nicht...

  Alt 6. Dez 2019, 10:16
Bezüglich array of const gibt es meines Wissens nach auch keine vorgefertigte Lösung, aber auch das lässt sich relativ einfach realisieren. (function (A: array of const): TArray<TVarRec> begin Pointer(Result) := Pointer(A); end )
NEIN, denn array of const ist nicht gleich array of const !

Als Parameter sind array of-Definitionen ein eigener Typ/Mechianismus, der intern auch komplett anders arbeitet und aufgebaut ist.
http://docwiki.embarcadero.com/RADSt...en/Open_Arrays
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Array of String als Konstante klappt nicht...

  Alt 6. Dez 2019, 11:28
Was du wohl eigentlich sagen wolltest:
Zitat:
array of const ist nicht gleich TArray<TVarRec>
.
Und ja, da hast du natürlich recht. Zumindest so teilweise.

Nur habe ich deshalb nicht Unrecht. Schauen wir es uns etwas genauer an:
Ein array of const wird vom Compiler wie ein statisches Array behandelt, obwohl es intern ein PVarRec ist. Deshalb brauchen wir einen @ -Operator vor dem array (welchen ich gestern nicht geschrieben habe, weil ich gerade keinen Bock hatte, den Code zu testen und so nicht gemerkt habe, dass er eben nur fast richtig ist).

Somit wird folgende Funktion eben funktionieren:

Delphi-Quellcode:
function ArrayOfConstToArrayOfTVarRec(a: array of const): TArray<TVarRec>;
begin
  Pointer(Result) := Pointer(@a);
end;
etwas typsicherer wäre es dann aber doch, nicht beides nach Pointer zu casten, sondern das Rechte nach TArray<TVarRec> . Dann sieht das ganze so aus:

Delphi-Quellcode:
function ArrayOfConstToArrayOfTVarRec(a: array of const): TArray<TVarRec>;
begin
  Result := TArray<TVarRec>(@a);
end;
Kannst du ja gern testen, wenn du es mir nicht glaubst. Aber es funktioniert.

Showmessage(String(ArrayOfConstToArrayOfTVarRec(['hello'])[0].VUnicodeString)); // Zeigt "hello"
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz