AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verschachtelte Arrays und Records

Ein Thema von enigma · begonnen am 9. Feb 2021 · letzter Beitrag vom 9. Feb 2021
Antwort Antwort
enigma

Registriert seit: 15. Jun 2008
37 Beiträge
 
#1

Verschachtelte Arrays und Records

  Alt 9. Feb 2021, 10:26
Hallo zusammen,

ich plage mich schon länger mit ineinander verschachtelten Arrays und Records und freue mich über jeden Tipp.

Die Datenstruktur ist die folgende:

Delphi-Quellcode:
TArray1 = array[1..1] of
 record
   String1: String;
// array2: array[1..1] of //mit dieser Länge 1 klappt es, s. unten
   array2: array[1..2] of //mit dieser Länge 2 klappt es nicht, Fehlermeldungen s. weiter unten
   record
     String2: String;
     array3: array[1..4, 1..2] of Double;
   end;
 end;
Diese Definition mit Länge von array2 = 1 klappt:

Delphi-Quellcode:
  array1Arr2Laenge1: TArray1 =
  ( ( String1: 'TestString1';
      array2:
      (
        ( String2: 'TestString2';
          array3:
          ( (1, 2) ,
            (1, 2),
            (1, 2),
            (1, 2)
          ); {array3}
        ) {record}
      ); {array2}
    ) {record}
  ); {array1Arr2Laenge1}
Diese Definition mit Länge von array2 = 2 klappt nicht, Fehlermeldungen beim Übergang von erster zu zweiter Definition von record 2 klappt nicht, s. unten

Delphi-Quellcode:
 
 array1: TArray1 =
  ( {array1}
   ( {record 1}
      String1: 'TestString1';
      array2:
      ( {array2 }
        ( {record 2}
          String2: 'TestString2';
          array3:
          ( (1, 2) ,
            (1, 2),
            (1, 2),
            (1, 2)
          ); {array3}
        ) {record 2}
        //) {Setze ich hier ‘)‘ wie unten gefordert, erscheint}
                                   {Folgende Meldung: „Anzahl der Elemente (1) weicht von der
                                                       Deklaration (2) ab“}

        ( {record 2}       {Meldung „‘)‘ erwartet, aber ‚(‘ gefunden“}
          String2: 'TestString2';
          array3:
          ( (1, 2) ,
            (1, 2),
            (1, 2),
            (1, 2)
          ); {array3}
        ) {record 2}

      ); {array2}
    ) {record 1}
  ); {array1}
Wenn ihr eine Idee habt, lasst sie mich bitte wissen.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Jetzt endgültig ;-) Verschachtelte Arrays und Records

  Alt 9. Feb 2021, 10:37
[EDIT] Kann prinzipiell auch sein, dass ich durch die vielen Klammern und dem schnellen Lesen etwas verrutscht bin. Aber das Komma scheint trotzdem zu fehlen. [/EDIT]

Du hast TArray1 als array[1..1] deklariert. Da ist natürlich klar, dass nur ein Element aufgenommen werden kann. Du musst das Array vergrößern. Zusätzlich musst du dann bei der Definition natürlich die Elemente mit Komma trennen.

Unabhängig davon finde ich die Art und Weise wie du das aufziehst allerdings recht unübersichtlich. Warum erstellt du dir nicht separate Record Typen und verweist dann darauf?

Könnte dann in etwa so aussehen. Nur schnell hier im Editor geschrieben:

Delphi-Quellcode:
Record2 = record;
  // Some types
  Data: array of Record3;
  String2: String;
  array3: array[1..4, 1..2] of Double;
end;

Record1 = record
  String1: String;
  Data: array of Record2;
end;

TArray1 = array[1..1] of
 record
   String1: String;
   array2: array of Record1;
 end;

Geändert von Aviator ( 9. Feb 2021 um 10:41 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Verschachtelte Arrays und Records

  Alt 9. Feb 2021, 10:42
Ganz ehrlich, das ist doch nicht mehr im geringsten leserlich. Wenn du es unbedingt als Konstante haben willst darfst du auch nicht durcheinanderkommen:

Delphi-Quellcode:
type
   TArray1 = array [1 .. 1] of record
      String1: String;
      array2: array [1 .. 2] of record
         String2: String;
         array3: array [1 .. 4, 1 .. 2] of Double;
      end;
   end;

const
   array1: TArray1 = (
      (
         String1: 'TestString1';
         array2: (
            (
               String2: 'TestString2';
               array3: ((1, 2), (1, 2), (1, 2), (1, 2));
            )
            ,
            (
               String2: 'TestString2';
               array3: ((1, 2), (1, 2), (1, 2), (1, 2));
            )
         )
      )
   );

PS: Erinnert mich ein bisschen an "LISP" hieraus:
https://toggl.com/blog/save-princess...ming-languages

Geändert von Der schöne Günther ( 9. Feb 2021 um 14:50 Uhr)
  Mit Zitat antworten Zitat
enigma

Registriert seit: 15. Jun 2008
37 Beiträge
 
#4

AW: Verschachtelte Arrays und Records

  Alt 9. Feb 2021, 15:54
Vielen Dank für eure Tipps - das Problem ist gelöst.

Manchmal übersieht man eine Kleinigkeit...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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