AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?

Offene Frage von "BadenPower"
Ein Thema von BadenPower · begonnen am 21. Jan 2015 · letzter Beitrag vom 23. Jan 2015
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?

  Alt 22. Jan 2015, 17:57
Was hat das mit Glück zu tun???

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.
Genau, das gibt einen Typen "Variant" zurück (wo ein Variant-Array drin steckt) und du weißt es an einen Typen "Array of Variant" zu.

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 MSDN-Library durchsuchenSafeArrayGetLBound zugreifen mußt.
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.

Ich frag mich grade, ob es nicht vielleicht inzwischen einen netten Record-Helper für Variants gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jan 2015 um 18:04 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?

  Alt 22. Jan 2015, 18:27
Genau, das gibt einen Typen "Variant" zurück (wo ein Variant-Array drin steckt) und du weißt es an einen Typen "Array of Variant" zu.
Wo???

Ich weise das von VarArrayCreate zurückgebene Variant einem Variant zu und nicht einem "Array of Variant".

Und die Funktionen für das Auslesen der zweiten Ebene wurden mehrmals genannt, also nicht Length, High oder so, sondern VarArrayHighBound-VarArrayLowBound.
Ich hatte nach einer Funktion zum Auslesen der Länge gesucht und bisher immer noch nicht gefunden.

Ich habe keine Funktionen gesucht, mit deren Hilfe ich mir die Länge SELBST berechnen kann.

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
Der Einzeiler zur Berechnung der Arraylänge, welchen ich oben gepostet habe, deckt auch die Möglichkeit ab, dass es auch einen negative ArrayIndex gibt.


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.

Ich kann mir auch keinen Grund vorstellen, wozu man hier überhaupt ein Length braucht.
Das war ja auch nur ein Spielcode, um den Fehler beim Zugriff mit Length zu erzeugen.


NACHTRAG:


Genau, das gibt einen Typen "Variant" zurück (wo ein Variant-Array drin steckt) und du weißt es an einen Typen "Array of Variant" zu.
Habe gerade nochmals den Spiel-Code, welchen ich gepostet habe angeschaut und tatsächlich die von Dir bemängelte Zuweisung(en) gefunden.

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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (22. Jan 2015 um 19:21 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?

  Alt 23. Jan 2015, 06:50
Wieso erwartest Du eigentlich, das die Bibliotheken für alle Problemstellungen eine fertige Funktion anbieten, ' ohne sie ausrechnen zu müssen'? Wenn ich etwas passendes nicht finde, schreibe ich mir eine Funktion dafür. Ganz einfach. Manchmal stelle ich dann später fest: "Huch, gibts ja doch". Oder sie kommen später dazu.

Eine API hat nebenbei den Sinn und Zweck, die Elementaroperationen abzubilden, und nicht alle möglichen Kombinationen der Elementaroperationen. In Bibliotheken kommen dann noch sinnvolle und oft benötigte Funktionen hinzu, die technisch gesehen jedoch nicht notwendig sind. Wenn also 'VarArrayLowBound' und 'VarArrayHighBound' zur Verfügung gestellt wird, kann man sich daraus leicht sein 'VarArrayLength' zusammenzimmern.

Gäbe es für jede Problemstellung etwas Fertiges, würde das Programmieren nicht nur keinen Spaß mehr machen, sondern auch gar nicht mehr stattfinden.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: Delphifunktion um die Länge eines Array in einem "Array of Variant" zu bestimmen?

  Alt 23. Jan 2015, 08:50
Wieso erwartest Du eigentlich, das die Bibliotheken für alle Problemstellungen eine fertige Funktion anbieten, ' ohne sie ausrechnen zu müssen'?
Weil es eigentlich logisch sein müsste, dass es so eine Funktion gibt.


Um den niedrigsten Indexwert eines Arrays zu erhalten gibt es Low().
Um den höchsten Indexwert eines Arrays zu erhalten gibt es High().
Um die Länge eines Arrays zu erhalten gibt es Length().


Um den niedrigsten Indexwert eines Arrays in einem Variant zu erhalten gibt es VarArrayLowBound().
Um den höchsten Indexwert eines Arrays in einem Variant zu erhalten gibt es VarArrayHighBound().

Warum gibt es nun kein VarArrayLength()???

Das ist doch eine berechtigte Frage.
Bzw. war meine Frage, ob es solch eine Funktion gibt, denn ich hätte die Funktion auch übersehen haben können.

Aber in Delphi wird das Array, egal in welcher Form nur stiefmütterlich behandelt. Es lebe PHP.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  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 03:20 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