![]() |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Und dann sollte man langsam mal den Unterschied zwischen Array, Variant und Variant-Array verstehen, dann wird klar, daß
Delphi-Quellcode:
natürlich nicht funktionieren kann.
lArray1 := VarArrayCreate([0,5],varVariant);
Die 1. Ebene ist ein stinknormales Array, also wird da mit SetLength/Length gearbeitet und erst in Ebene 2 kommen die Variants, in welche man Variant-Arrays reintun kann, wo man dann mit VarArrayCreate/VarArrayDimCount arbeiten könnte. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Aber es gibt scheinbar keine Funktion um die Länge von lArray[0] auszulesen. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Ohh, dann hast du Glück, daß automatisch _VarToDynArray aufgerufen wird, was aus deinem erstellten Variant-Array ein dynamisches Array macht.
![]() ![]() Hätte jetzt nicht erwartet, daß Delphi das automatisch macht, aber dennoch ist es praktisch falsch, da du dort eben ein dynamisches Array erstellen wolltest, es aber nicht machst. Und später versuchst du eines der Variant-Arrays als dynmamisches Array anzusprechen, was nicht geht, da du dem Compiler nicht explizit sagst was du willst. Der Compiler weiß ja nicht was in dem Variant steckt (also beim Compilieren) und springt beim Length aus Gewohnheit auf String, versucht den Variant also in einen String zu casten, was dir Delphi auch eindeutig sagt (siehe Fehlermeldung), um dann vom "String" das Length auszulesen. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Das Array der Ebene 1 ist ein Array mit Felder des Datentyps "Variant". Also ist Array[0] ein "Variant". Die Funktion VarArrayCreate() gibt den Datentyp "Variant" zurück. Aber immernoch suche ich eine Funktion zum Auslesen der Arraylänge der 2. Ebene. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Sorry für meinen kenntinsfreien Einwurf:
Kann man da nicht irgendwie "rückwärts" durch das zweidimensionale? Array parsen? MfG |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Abgesehen von der erforderlichen Sonderbehandlung leerer VarArrays, ergibt sich die Länge eines Arrays immer aus der Differenz des höchten Index´ und des niedrigsten Index` plus eins. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Die Frage ist, ob es denn wirklich keine integrierte Delphi-Funktion dafür gibt um die Länge eines Array, welches in einer Variante gespeichert ist, auszulesen. Für den normalen Datentyp Array gibt es: Low(Array), High(Array) und eben Length(Array) Ist das Array in einer Variante, dann gibt es: VarArrayLowBound(VarArray) und VarArrayHighBound(VarArray) aber so wie es scheint kein VarArrayLength(VarArray) Zitat:
Delphi-Quellcode:
Länge := (VarArrayHighBound(VarArray,1) - VarArrayLowBound(VarArray,1) +1)
|
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Und die Funktionen für das Auslesen der zweiten Ebene wurden mehrmals genannt, also nicht Length, High oder so, sondern VarArrayHighBound-VarArrayLowBound. Ja, es gibt kein VarArrayLength, aber hier muß man auch beachten, daß Vairant-Arrays nicht bei 0 beginnen müssen, so wie die dynamischen Arrays und dann sei bitte froh, daß du nicht selber direkt auf ![]() PS: Variant ist ein Typ vom Windows und dessen API stellt hat kein Length zur Verfügung, aber man kann gern an Embarcadero einen Feature-Request stellen und um ein Length bitten, wenn man es nicht schafft das selber zu schreiben. Ich kann mir auch keinen Grund vorstellen, wozu man hier überhaupt ein Length braucht. :gruebel: Ich frag mich grade, ob es nicht vielleicht inzwischen einen netten Record-Helper für Variants gibt. |
AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Zitat:
Ich weise das von VarArrayCreate zurückgebene Variant einem Variant zu und nicht einem "Array of Variant". Zitat:
Ich habe keine Funktionen gesucht, mit deren Hilfe ich mir die Länge SELBST berechnen kann. Zitat:
Aber ich bin ja schon froh, dass auf meine Frage zum ersten mal eine Anwort kam und ich nicht alleine bin, der keine Funktion gefunden hat, welche die Länge zurück gibt, ohne sie ausrechnen zu müssen. Zitat:
NACHTRAG: Zitat:
Aber da tritt kein Fehler auf, da da ein automatischer Type-Cast stattfindet. Im Original-Code ist dort keine VarArrayCreate-Funktion, sondern die Länge des "Array of Variant" wird über SetLength() gesetzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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