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
BadenPower

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

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

  Alt 21. Jan 2015, 20:29
Schöner Link. Zeigt aber keine Funktion mit welcher man die Länge auslesen kann.
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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 21. Jan 2015, 20:34
Schöner Link. Zeigt aber keine Funktion mit welcher man die Länge auslesen kann.
Immer hübsch de Äuglein uffmache
Nach kurzen Stöbern in der OnlineHilfe:
VarArrayDimCount, VarArrayHighBound, VarArrayLowBound
http://docwiki.embarcadero.com/Libra...rArrayDimCount
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BadenPower

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

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

  Alt 21. Jan 2015, 20:52
Immer hübsch de Äuglein uffmache
Nach kurzen Stöbern in der OnlineHilfe:
VarArrayDimCount, VarArrayHighBound, VarArrayLowBound
http://docwiki.embarcadero.com/Libra...rArrayDimCount
Diese Funktionen kenne ich zur Genüge.

VarArrayDimCount:
Gibt die Anzahl der Dimensionen zurück, aber nicht die Arraylänge.
Löst beim Aufruf von Array[0] eine Exception wenn das Array die Länge 0 hat.

VarArrayLowBound:
Gibt nur den niederen Indexwert aus.

VarArrayHightBound:
Gibt nur den höchsten Indexwert aus, oder auch nicht, wenn das Array die Länge 0 hat.
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 (21. Jan 2015 um 21:37 Uhr) Grund: Nachträge
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 21. Jan 2015, 21:02
Tja, da wirst du wohl mal folgendes machen müssen:

Poste den Code der das Problem zeigt
Teile uns die Exception mit (CopyPaste der Meldung)

Dann schauen wir weiter
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BadenPower

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

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

  Alt 21. Jan 2015, 21:29
hier einmal ein wenig Testcode:

benötigt
1x Form
1x Button
4x Label

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TMyVarArray = Array of Variant;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}



function LocalNewArray(): TMyVarArray;
begin
  //Result := VarArrayCreate([-3,-2],varVariant);
  //Result := VarArrayCreate([0,5],varVariant);
  SetLength(Result,0);


end;

procedure TForm1.Button1Click(Sender: TObject);
var
  lArray1: Array of Variant;
  lArray2: Array of Variant;
begin

  lArray1 := VarArrayCreate([0,5],varVariant);
  //SetLength(lArray1[0],0);
  lArray1[0] := VarArrayCreate([-3,-2],varVariant);
  lArray1[0][-2] := 'Test';

  lArray2 := VarArrayCreate([0,10],varVariant);
  lArray2[0] := VarArrayCreate([0,10],varVariant);
  //lArray2[0] := LocalNewArray();
  //SetLength(lArray2[0],0);

  try
    Label1.Caption := lArray1[0][-2];
    //Label1.Caption := IntToStr(Length(lArray1));
  except
    Label1.Caption := 'Fehler';
  end;

  try
    Label2.Caption := IntToStr(Length(lArray2));
  except
    Label2.Caption := 'Fehler';
  end;

  try
    //Label3.Caption := IntToStr(VarArrayHighBound(lArray1[0],1));
    Label3.Caption := IntToStr(VarArrayDimCount(lArray1[0]));
    //Label3.Caption := IntToStr(Length(lArray1[0]));
    //Label3.Caption := IntToStr(High(lArray1[0]));
  except
    Label3.Caption := 'Fehler';
  end;

  try
    //Label4.Caption := IntToStr(VarArrayLowBound(lArray2,2));
    //Label4.Caption := IntToStr(VarArrayHighBound(lArray2,2));
    //Label4.Caption := IntToStr(VarArrayLowBound(lArray2[0],1));
    //Label4.Caption := IntToStr(VarArrayHighBound(lArray2[0],1));
    //Label4.Caption := IntToStr(VarArrayDimCount(lArray2[0]));
    Label4.Caption := IntToStr(Length(lArray2[0]));
    //Label4.Caption := IntToStr(High(lArray2[0]));
  except
    Label4.Caption := 'Fehler';
  end;



end;

end.
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
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 21. Jan 2015, 21:33
Man könnte den Testcode ja mal so ergänzen, dass er auch die tatsächliche Fehlermeldung ausgibt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 21. Jan 2015, 21:56
Und dann sollte man langsam mal den Unterschied zwischen Array, Variant und Variant-Array verstehen, dann wird klar, daß
 lArray1 := VarArrayCreate([0,5],varVariant); natürlich nicht funktionieren kann.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jan 2015 um 21:58 Uhr)
  Mit Zitat antworten Zitat
BadenPower

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

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

  Alt 21. Jan 2015, 21:57
Man könnte den Testcode ja mal so ergänzen, dass er auch die tatsächliche Fehlermeldung ausgibt
Wenn das Programm läuft und Du den Button betätigst, dann müsste er in Zeile 90 >>> Label4.Caption := IntToStr(Length(lArray2[0])); <<< im Debugger die Exception auswerfen.
Angehängte Grafiken
Dateityp: jpg Exception.jpg (69,5 KB, 14x aufgerufen)
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
Benutzerbild von himitsu
himitsu

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

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

  Alt 21. Jan 2015, 22:27
Ohh, dann hast du Glück, daß automatisch _VarToDynArray aufgerufen wird, was aus deinem erstellten Variant-Array ein dynamisches Array macht.
Delphi-Referenz durchsuchenDynArrayToVariant Delphi-Referenz durchsuchenDynArrayFromVariant
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jan 2015 um 22:31 Uhr)
  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 18:47 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