Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   längerer Codeblock für 2 Arrays mit identischem Record (https://www.delphipraxis.net/208279-laengerer-codeblock-fuer-2-arrays-mit-identischem-record.html)

enigma 8. Jul 2021 10:02


längerer Codeblock für 2 Arrays mit identischem Record
 
Hallo,

ich habe ein Problem mit 2 Arrays verschiedener Struktur,
die jedoch ein identisches Record beinhalten.
Es gibt einen längeren Codeblock mit den Variablen des
identischen Records.

Die Schwierigkeit besteht darin, Array1 und Array2 mit dem
"with" Kommando zu platzieren.

Folgendes klappt nicht:
Code:
procedure Test;
begin
  if begingung1 then
    with array1 do begin
  else if bedingung2 then begin   
    with array2 do begin

    with recordX do begin      
     x := 1; //x ist im recordX von array1 und array2 identisch
     //es folgt noch ein längerer Codeblock mit Variablen,
     //die im recordX beider Arrays identisch sind

end;

Ein weiterer Versuch, in procedure Test eine Extra-Procedure Test2
zu erstellen, klappt so auch nicht, da für recordX entweder array1 oder
array2 erforderlich ist.
Code:
procedure Test;
begin
  procedure Test2;   
    with recordX do begin      
     x := 1; //x ist im recordX von array1 und array2 identisch
     //es folgt noch ein längerer Codeblock mit Variablen,
     //die im recordX beider Arrays identisch sind
  end;    
end;
Ich freue mich über jeden Typ - vielen Dank!

Uwe Raabe 8. Jul 2021 15:55

AW: längerer Codeblock für 2 Arrays mit identischem Record
 
Deine Verwendung von With ist falsch und ich sage nicht, wie es richtig geht, da du es nicht verwenden sollst. Dein Problem kannst du nämlich gar nicht damit lösen. Das weiß ich, obwohl ich es noch nicht richtig verstanden habe.

Rollo62 8. Jul 2021 16:14

AW: längerer Codeblock für 2 Arrays mit identischem Record
 
Delphi-Quellcode:
// Auch nicht Optimal, aber zumindest sollte es funktionieren
procedure DoTest( const AArr : TXyzArray);
begin
  if Length( AArr ) then
  begin
      //Machwas (Was genau Du möchtest verstehe ich auch noch nicht )
  end;

end;


procedure Test;
begin
  if begingung1 then
    DoTest( array1 )
  else if bedingung2 then
    DoTest( array2 );
end;

Frickler 9. Jul 2021 08:57

AW: längerer Codeblock für 2 Arrays mit identischem Record
 
Zitat:

Zitat von Rollo62 (Beitrag 1492055)
Delphi-Quellcode:
// Auch nicht Optimal, aber zumindest sollte es funktionieren
procedure DoTest( const AArr : TXyzArray);
begin
  if Length( AArr ) then
  begin
      //Machwas (Was genau Du möchtest verstehe ich auch noch nicht )
  end;

end;


procedure Test;
begin
  if begingung1 then
    DoTest( array1 )
  else if bedingung2 then
    DoTest( array2 );
end;

Wenn ich ihn richtig verstanden habe, hat er zwei "array of record" mit unterschiedlichen Arrays (wird vermutlich nicht bloß die Länge sein), aber gleichem Record.
Etwa so:
Delphi-Quellcode:
type
  TGartenFruechte   = (gfApfel, gfBirne, gfPflaume);
  TExotischeFruechte = (efBanane, efKiwi, efMango, efPapaya);
  TMyRecord = record
                [...] viele Felder
              end;

  TGartenArray = array [TGartenFruechte] of TMyRecord;
  TExoticArray = array [TExotischeFruechte] of TMyRecord;
Aktuell hat er vermutlich pro Array eine Bearbeitungsprozedur, wobei der Part der Bearbeitung des Records in beiden der gleiche ist. Die beiden Prozeduren will er jetzt zu einer zusammenfassen. Das geht nicht. Was aber geht, wäre die Bearbeitung des Records in eine eigene Prozedur verlegen (oder bei neuerem Delphi eine Recordmethode dafür anzulegen) - und nicht etwa in ein Include auszulagern, wie in einem anderen Forenbeitrag gefragt.

Blup 14. Jul 2021 16:51

AW: längerer Codeblock für 2 Arrays mit identischem Record
 
Zitat:

Zitat von Frickler (Beitrag 1492074)
Was aber geht, wäre die Bearbeitung des Records in eine eigene Prozedur verlegen

Wenn der Codeblock nur um ein Element des selben Typs aus zwei verschiedenen Quellen behandeln soll, z.B. so:
Delphi-Quellcode:
procedure TuWasMit(var AItem: TMyRecord);
begin  
  //es folgt noch ein längerer Codeblock mit Variablen,
  //die im recordX beider Arrays identisch sind
end;

procedure Test(ABedingung: Boolean; var AGarten: TGartenArray; var AExotic: TExoticArray);
begin
  x := 1;

  if ABedingung then
    TuWasMit(AGarten[x])
  else
    TuWasMit(AExotic[x]);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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