![]() |
[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 |
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 -.- |
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. |
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 |
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. |
AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
ein Versuch:
Delphi-Quellcode:
Grüße
type
TBigArray = Array[0..1][0..26] of String; procdure tuwas(aArray: TBigArray; arrayId); Klaus |
AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
Delphi-Quellcode:
Array of Array of ...
TArray<TArray<...>> ...
Delphi-Quellcode:
ist hier ein Array-Parameter und hat ganz andere Eigenschaften.
Array of
Delphi-Quellcode:
Bei Test2 kann man nur Variablen, Konstanten, Property oder ein Funktion-Result übergeben,
procedure Test1(param: array of X);
// versus type TMyArray = array of X; // oder = TArray<X>; procedure Test2(param: TMyArray); während beim Ersten auch
Delphi-Quellcode:
geht.
Test1([a, b, c]);
|
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 |
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. |
AW: Finden oder Übergeben mehrdimensionaler StringArrays in/an eine Procedure
Zitat:
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 11:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz