AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Konstanter dynamischer Array <- Möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

Konstanter dynamischer Array <- Möglich?

Ein Thema von SebE · begonnen am 10. Mär 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
Seite 1 von 3  1 23      
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

Konstanter dynamischer Array <- Möglich?

  Alt 10. Mär 2009, 21:10
Delphi-Quellcode:
type
  rec = record
    irgendwas: CHAR;
    liste: array of integer;
    end;

const
  A: array[0..1] of rec = (
    (irgendwas: 'a'; liste: (1, 2, 3, 5, 0)), <- hier mag Delphi meine Syntax nicht
    (irgendwas: 't'; liste: (3, 5, 90))
    );
Problem: Es sieht so aus, als kann man keine konstanten dynamischen arrays erstellen (lassen).

Kann nicht der Compiler die Längen ausrechnen?
Da es unter Umständen größere Datenmengen werden können, möchte ich versuchen, dass es so weit wie möglich automatisiert läuft (ohne Längenanpassungen)

Wer echt der Hit, wenn mir jemand sagen könnte, ob es in Pascal/Delphi doch funktioniert!
Danke schon einmal dafür
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Konstanter dynamischer Array <- Möglich?

  Alt 10. Mär 2009, 21:15
Nein, das geht auch nicht.
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#3

Re: Konstanter dynamischer Array <- Möglich?

  Alt 10. Mär 2009, 21:18
Klare Ansage!

Danke dir.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

Re: Konstanter dynamischer Array <- Möglich?

  Alt 10. Mär 2009, 21:25
Zitat von SebE:
Klare Ansage!
Ich wünschte ich irre mich. Nützlich wärs nämlich
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 05:12
Hi,

konstant und dynamisch sind doch eigentlich ein Wiederspruch in sich oder?
Erklär doch mal genauer was du erreichen willst!

Schönen Tag noch!
Rainer Unger
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 06:48
Wieso Widerspruch, dynamisch Größe für Ableitungen, die aber mit konstanten Werten.

So sind meine Tabellen-Felder vorab gespeichert. Array mit dynamischer Anzahl Feld/Typ und dann die konstanten Arrays jeder Tabelle mit der individuellen Anzahl an Werten.

Würde der Konstrukt wie oben funktionieren, könnte ich noch Datenbank und Tabellenname mit in einem Record speichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 09:29
Du könntest höchsten die Unter-Arrays als einzelne Konstanten erstellen und müßtest diese dann in die große Konstante einbinden.

Einzehln geht nicht, da du ja eine Array-Größe in der Struktur angeben muß und dieses nicht für jede Subebene einzeln angegeben werden kann.


[add]
Möglich wäre auch noch die maximale Größe vorzugeben und den Rest aufzufüllen.
z.B. mit Nullen oder einem mich-gibt's-nicht-Wert und eventuell noch eine Längenangabe an den Anfang zu stellen.
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 sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 09:49
*räusper*
Hätte eigentlich nicht gedacht, dass dies funktioniert
Delphi-Quellcode:
type
  rec = record
    irgendwas: CHAR;
    liste: array of integer;
    end;

const
  L1: array[0..4] of integer=(2, //erster Eintrag ist Referenzzähler
                              3, //zweiter Eintrag für die Länge des eigentlichen Arrays
                              3, 5, 90); //und hier der Inhalt des eigentlichen Arrays
  L2: array[0..6] of integer=(2, 5, 1, 2, 3, 5, 0); //same as L1
  A: array[0..1] of rec = (
    (irgendwas: 'a'; liste: @L1[2]), //Zeiger auf den ersten eigetlichen Wert des Arrays
    (irgendwas: 't'; liste: @L2[2])
    );

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:Integer;
begin
  for i:=low(a) to high(a) do
  begin
    memo1.lines.add(a[i].irgendwas);
    for j:=low(a[i].liste) to high(a[i].liste) do
      memo1.lines.add(inttostr(a[i].liste[j]));
  end;
end;
Edit: Fast vermutet und hat sich beim Test bestätigt --> einen referenzzähler brauchen unsere Arrays auch. -1, wie bei constanten Strings funktioniert leider nicht, also nehme ich mal +1.
Edit2: Die Frage ist noch, wie man das simuliert, wenn man mal kein Integer-Array hat?

Edit3: Und wer es mal für andere Arrays sucht...hier mal am Beispiel Strings.
Problem ist dabei noch der Referenzzähler. Bei 1 gibt es am Ende des Projektes einen Runtime-Error. Naja...ob man das produktiv einsetzen sollte?
Delphi-Quellcode:
type
    rec = record
    irgendwas: CHAR;
    liste: array of string;
    end;

    THeader=record
      ref:Integer;
      length:Integer;
    end;

    TL1 =record
      Header:THeader;
      Content:array[0..2] of string;
    end;

    TL2 =record
      Header:THeader;
      Content:array[0..4] of string;
    end;


const
  L1: TL1=(Header:(ref: 2; length: 3);
           Content: ('A','B','C'));
  L2: TL2=(Header:(ref: 2; length: 5);
           Content: ('A','B','C','D','X'));
  A: array[0..1] of rec = (
    (irgendwas: 'a'; liste: @L1.Content),
    (irgendwas: 't'; liste: @L2.Content)
    );

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;




var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:Integer;
    test:rec;
begin
  for i:=low(a) to high(a) do
  begin
    memo1.lines.add(a[i].irgendwas);
    for j:=low(a[i].liste) to high(a[i].liste) do
      memo1.lines.add(a[i].liste[j]);
  end;

  memo1.lines.add('---');
  Test:=a[0];

  for i:=low(a) to high(a) do
  begin
    memo1.lines.add(a[i].irgendwas);
    for j:=low(a[i].liste) to high(a[i].liste) do
      memo1.lines.add(a[i].liste[j]);
  end;

  memo1.lines.add('---');
  memo1.lines.add(test.irgendwas);
  for j:=low(test.liste) to high(test.liste) do
    memo1.lines.add(test.liste[j]);
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 10:32
klar geht das ... schon seit D4 ... da mal gemacht so ähnlich gemacht hatte

Delphi-Quellcode:
const
  L1: record
    RefCount, Length: Integer;
    Data: array[0..4] of Irgendwas;
  end;

@L1.Data
[edit] ahhh, bist ja selbst schon draufgekommen

[add]
nimm aber lieber einen RefCount von mindestens 2 ... nicht das es Probleme gibt, wenn du das simulierte ConstArray mal an eine andere Array-Variable übergibst.
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 sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 10:35
Zitat von himitsu:
klar geht das ... schon seit D4 ... da mal gemacht so ähnlich gemacht hatte
Das liegt wohl mindestens an den fehlenden dynamischen Arrays vor D4

Edit:
Zitat:
[add]
nimm aber lieber einen RefCount von mindestens 2 ... nicht das es Probleme gibt, wenn du das simulierte ConstArray mal an eine andere Array-Variable übergibst.
Habsch do!
Edit2: Oder meinst du im Integer-Array? Da gabs aber keine Probleme. Ich ändere es gleich. Besser ist.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:06 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