Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   [gelöst] Finden oder Übergeben mehrdimensionaler Arrays in/an eine Procedure (https://www.delphipraxis.net/208706-%5Bgeloest%5D-finden-oder-uebergeben-mehrdimensionaler-arrays-eine-procedure.html)

Cordt 9. Sep 2021 12:15


[gelöst] Finden oder Übergeben mehrdimensionaler Arrays in/an eine Procedure
 
Hallo miteinander,

ich stehe vor dem Problem, dass ich einer Procedure gerne sagen würde, dass sie mit einem von 26 verschiedenen und verschiedengroßen Arrays of Array[0..x] of String arbeiten soll.
Die Arrays kann ich leider nicht ersetzen, das würde jeden Rahmen sprengen.
Am liebsten wäre mir ja irgend eine Art von FindComponent, was ich auch schon gegoogled habe, aber die einzige (gescheiterte) Lösung, die hierzu gepasst hätte, hab ich nur für einfache Datentypen gesehen.

vllt stehe ich auch gerade total auf dem Schlauch und übersehe eine offensichtliche Lösung.

Beste Grüße
Cordt

Moombas 9. Sep 2021 12:23

AW: Finden oder Übergeben mehrdimensionaler StringArrays
 
Keine Ahnung ob ich dich nun nicht richtig verstehe aber die Größe eines Arrays kannst du doch ermitteln oder ist jedes einzelne Array anders Dimensioniert (bezogen auf die Arrays im Array)?
Wenn ja, gibt es evtl. feste Vorgaben (deine "26" assoziiert mir das), die könntest du in der Procedure doch ermitteln oder ggf. als mit zu übergebenden Wert einbauen?

Wenn nein, wäre doch einfach die Abfrage wenn das Array Größe X hat und das 1. Array im Array Größe Y, dann ist es folgendes,...

Oder denke ich gerade zu einfach -.-

Cordt 9. Sep 2021 12:48

AW: Finden oder Übergeben mehrdimensionaler StringArrays
 
Hallo Moombas, danke für deine Antwort,

mir geht es nicht um die Größe der Arrays, die kenne ich.
ich muss der Procedure aber sagen "arbeite mit Array1" oder "Arbeite mit Array22".
Die Arrays sind in einer Größe zwischen Array of Array[0..1] und [0..20] und die Lenge ist nach der Initialisierung auch fix.

Ich weiß halt nicht, wie ich die Arrays übergeben kann

Procedure DoStuffWithAnArray(IrgendeinArray : Array of Arra of String)

geht halt nicht, aber etwas in der Richtung brauche ich

Die Procedure muss halt in einem Schritt mit dem einen, in einem anderen Schritt mit einem anderen Array arbeiten, die Parameter, was und wie es arbeiten soll kann ich alle mitgeben, aber eben nicht die Info, mit welchem Array das jetzt getan werden soll.

Klar kann ich dann irgendeine Zuordnung mitgeben und mit ner großen IF-Reihe dann einmal alles durch machen, dann hab ich aber wieder 26 mal beinahe den selben Code dastehen, in dem nur einzelne Parameter anders sind und der Arrayname.

Klaus01 9. Sep 2021 12:52

AW: Finden oder Übergeben mehrdimensionaler StringArrays
 
.. wenn Du eine zweite Parameter übergibst z.B. ArrayId:Integer

DoStuffWithAnArray(IrgendeinArray : Array of Arra of String; arrayId: Integer)

Grüße
Klaus

Cordt 9. Sep 2021 12:57

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
Hallo Klaus

das geht nicht, ich kann das Array so nicht übergeben, "Bezeichner erwartet aber 'ARRAY' gefunden."

Wie gesagt, es geht darum wie ich der Procedure eines dieser Arrays übergeben, oder aber es in der Procedure anhand des Identifyers oder Namens (analog zu FindComponent) ermitteln kann.

Klaus01 9. Sep 2021 13:02

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
ein Versuch:
Delphi-Quellcode:
type
  TBigArray = Array[0..1][0..26] of String;


procdure tuwas(aArray: TBigArray; arrayId);
Grüße
Klaus

himitsu 9. Sep 2021 13:25

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
Delphi-Quellcode:
Array of Array of ...
TArray<TArray<...>>
...

Delphi-Quellcode:
Array of
ist hier ein Array-Parameter und hat ganz andere Eigenschaften.

Delphi-Quellcode:
procedure Test1(param: array of X);

// versus

type TMyArray = array of X; // oder = TArray<X>;
procedure Test2(param: TMyArray);
Bei Test2 kann man nur Variablen, Konstanten, Property oder ein Funktion-Result übergeben,

während beim Ersten auch
Delphi-Quellcode:
Test1([a, b, c]);
geht.

Cordt 9. Sep 2021 13:32

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
@Klaus01
Das ist doch jetzt ein 2-spaltiges Array mit 27 Zeilen?
Okay, vllt etwas mehr Kontext:
Ich habe 26 mehrdimensionale Arrays in folgenden Dimensionen:

Array of Array[0..1] of String;
Array of Array[0..2] of String;
Array of Array[0..3] of String;
Array of Array[0..4] of String;
Array of Array[0..5] of String;
Array of Array[0..7] of String;
Array of Array[0..8] of String;
Array of Array[0..9] of String;
Array of Array[0..12] of String;
Array of Array[0..13] of String;
Array of Array[0..14] of String;
Array of Array[0..15] of String;
Array of Array[0..17] of String;
Array of Array[0..19] of String;
Array of Array[0..20] of String;

Diese Arrays enthalten Daten und Referenzen und ich habe aktuell eine 10 Jahre alte "Suchfunktion", welche jedes Array nach der Reihe durchgeht und nach entsprechenden Schlagworten auf verschiedene Weisen sucht.
Sprich, er geht Array 1 durch, sucht mit Variante a, b, c und d, sammelt die Ergebnisse und geht weiter zu Array 2, sucht mit Variante a, b, c und d... usw. Die einzigen Unterschiede sind die Arrays und deren Dimensionen, aber das kann ich mit den Schleifenvariablen ja steuern.
Das alles ist ein hardgecodetes Monster, das jetzt durch eine Proicedure ersetzt werden soll, welche Array 1 und die Randinfos übergibt, dann Array 2 und die Randinfos, etc.



Edit: @himitsu
Dein Test1 geht ja generell nicht, oder verstehe ich deien Antwort gerade nicht so recht?
Und Test2 möchte einen Typen, was aber in meinem Fall bedeutet, dass ich für JEDE Arraygröße (also 15) einen Typen erstelle und für jeden eine Procedure. Das wäre ca 40% weniger Code, da manche der Arrays die gleichen Dimensionen haben, aber nicht das Ziel

TiGü 9. Sep 2021 13:32

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
?

Delphi-Quellcode:
program Project6;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

  const
    Array1 : array[0..1] of string = ('asdf', 'qwer');
    Array2 : array[0..2] of string = ('asdf', 'qwer', 'jklö');
    Array3 : array[0..3] of string = ('asdf', 'qwer', 'jklö', 'uiop');

procedure DoStuffWithAnArray(IrgendeinArray: array of string);
var
  str: string;
begin
    for str in IrgendeinArray do
    begin
        Writeln(str);
    end;
    Writeln;
end;

begin
  try
    DoStuffWithAnArray(Array1);
    DoStuffWithAnArray(Array2);
    DoStuffWithAnArray(Array3);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

Cordt 9. Sep 2021 13:46

AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
 
Zitat:

Zitat von TiGü (Beitrag 1494376)
?

Delphi-Quellcode:
program Project6;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

  const
    Array1 : array[0..1] of string = ('asdf', 'qwer');
    Array2 : array[0..2] of string = ('asdf', 'qwer', 'jklö');
    Array3 : array[0..3] of string = ('asdf', 'qwer', 'jklö', 'uiop');

procedure DoStuffWithAnArray(IrgendeinArray: array of string);
var
  str: string;
begin
    for str in IrgendeinArray do
    begin
        Writeln(str);
    end;
    Writeln;
end;

begin
  try
    DoStuffWithAnArray(Array1);
    DoStuffWithAnArray(Array2);
    DoStuffWithAnArray(Array3);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

Ich geh davon aus, dass du meine letzte Nachricht noch nicht hier mit einbezogen hast.
Zum einen brauche ich Array of Array of String, deine Variante hat gerade mal eine Ziele meiner Arraygröße. Zweitens gehen Konstanten nicht, da ich mir die Daten zur Laufzeit aus externen Dateien hole, die sich häufig ändern. Den Inhalt über den Quellcode zu pflegen wäre ein enormer Aufwand und ein ziemlicher Rückschritt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Seite 1 von 2  1 2      

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