AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Array von eigenem Record, der auch Arrays enthält
Thema durchsuchen
Ansicht
Themen-Optionen

Array von eigenem Record, der auch Arrays enthält

Offene Frage von "divBy0"
Ein Thema von divBy0 · begonnen am 5. Jun 2007 · letzter Beitrag vom 5. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#1

Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 13:40
Hallo!

Ich steh grad auf dem Schlauch.

Folgenden record hab ich definiert:

Delphi-Quellcode:
type
  TMyData = record
    Real : Array of Double;
    Int : Array of Integer;
  end;
Hat gut funktioniert, jetzt muss ich nur die Funktionalität erweitern und wollte von dem record dann entsprechende Arrays deklarieren.

Delphi-Quellcode:
var
  Daten : Array[0..3] of TMyData;
Wie schreibe ich denn jetzt bitte was in das Array rein?
Hab folgendes versucht, da bleibt es aber leer.

Delphi-Quellcode:
Daten[0].Int[0] := 1;
Daten[0].Int[1] := 2;
Daten[1].Int[0] := 3;
Daten[1].Int[1] := 4;
Marc
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 13:42
Wie wäre es denn zunächst mitSetLength(Daten[0].Int,2); (Ungetestet)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 13:53
Hab ich eben probiert, bringt aber auch nichts.

Hat vorher, als es noch kein "doppeltes" Array war allerdings auch ohne SetLength funktioniert.

vielleicht muss ich die Situation etwas näher erläutern:

Delphi-Quellcode:
for i := 0 to 4 do
begin
  ComPort.ReadStr(parameter, 1024);
  Daten[i] := getData(parameter);
end;
Also, hier wird ein String vom Comport gelesen und durch die Funktion getData in Integer und Double geteilt. Der Rückgabewerte der Funktion ist wieder von Typ TMyData.
Da der Type TMyData jetzt ja doch an das Array TMyData übergeben wird sollten dann auch die entsprechenden Werte in Daten[i].Int[xx] und Daten.Real[xx] abgelegt werden oder nicht?
Marc
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 13:58
Du muss schon Setlength benutzen aber für jedes der dynamischen Arrays

Delphi-Quellcode:
SetLength(Daten[0].Int, aLänge);
SetLength(Daten[0].Real, bLänge);
SetLength(Daten[1].Int, cLänge);
SetLength(Daten[1].Real, dLänge);
SetLength(Daten[2].Int, eLänge);
SetLength(Daten[3].Real, fLänge);
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:01
Hmm... habe gerade noch mal einen Blick ín die OH zum Thema dynamische Arrays geworfen.
Zitat:
Das folgende Beispiel deklariert ein eindimensionales Array mit Elementen vom Typ Real:

var MyFlexibleArray: array of Real;

Diese Deklaration weist MyFlexibleArray keinen Speicherplatz zu. Um ein Array im Speicher anzulegen, rufen Sie SetLength auf.
Und zu mehrdimensionalen dynamischen Arrays gibt es noch ein Beispiel (obwohl das hier ja nicht ganz passt, da ja nur zum Teil dynamisch):
Delphi-Quellcode:
var

     A : array of array of string;
     I, J : Integer;
begin
     SetLength(A, 10);
     for I := Low(A) to High(A) do
     begin
       SetLength(A[I], I);
       for J := Low(A[I]) to High(A[I]) do
         A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
     end;
end;
Was anderes wüsste ich im Moment auch nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:16
Ist es aber nicht so, dass wenn ich ein "statisches" Array mit Daten gefüllt hab und das an ein "dynamisches" Array übergebe, das Dynamische automatisch im Speicher angelegt wird?
Ich glaub so etwas hab ich in einem Buch mal gelesen, weiß aber nicht mehr wo das genau gestanden hat.
Marc
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:19
Zitat von divBy0:
Ist es aber nicht so, dass wenn ich ein "statisches" Array mit Daten gefüllt hab und das an ein "dynamisches" Array übergebe, das Dynamische automatisch im Speicher angelegt wird?
Ich glaub so etwas hab ich in einem Buch mal gelesen, weiß aber nicht mehr wo das genau gestanden hat.
Wie soll das gehen?
Woher soll der Compiler wissen, wieviel Speicher du für das Array reservieren möchtest? Raten?

Jedes dynamisches Array kann seine eigene unabhängige Größe haben.
Versuch es mal so wie ich es oben gezeigt habe.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:24
Hab ich ja versucht, geht aber leider nicht.

Ich nehme an, das der Compiler ermittelt, wie groß das zu übergebende Array ist und dann entsprechend den empfangenden Array den Platz zuweist.
Das hier funktioniert nämlich:

Delphi-Quellcode:
var
 Data1 : TMyData;
 Data2 : TMyData;

begin;
  // ... Anweisungen -> Data1.Int und Data1.Real mit Werten gefüllt
  Data2 := Data1; // Funktioniert auch ohne SetLength für Data2
end;
Marc
  Mit Zitat antworten Zitat
GTA-Place

Registriert seit: 5. Apr 2004
Ort: Weingarten
91 Beiträge
 
Delphi 7 Personal
 
#9

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:28
Data2 ist IMHO nur ein Pointer auf Data1.
Fabian
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Array von eigenem Record, der auch Arrays enthält

  Alt 5. Jun 2007, 14:28
Das was du jetzt machst ist nur eine Referenz auf das erste Record....natürlich geht das....hierbei wird kein extra Speicher geholt, sondern du verweist auf den ersten Record

Du bist dir sicher, daß du das wie ich oben gemacht hast?

SetLength(Daten[0].Int, aLänge); NICHT

SetLength(Daten[0].Int[0], aLänge);
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:50 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