AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign [gelöst] Finden oder Übergeben mehrdimensionaler Arrays in/an eine Procedure

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

Ein Thema von Cordt · begonnen am 9. Sep 2021 · letzter Beitrag vom 9. Sep 2021
Antwort Antwort
Seite 1 von 2  1 2   
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#1

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

  Alt 9. Sep 2021, 12:15
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

Geändert von Cordt ( 9. Sep 2021 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Finden oder Übergeben mehrdimensionaler StringArrays

  Alt 9. Sep 2021, 12:23
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 -.-
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 9. Sep 2021 um 12:26 Uhr)
  Mit Zitat antworten Zitat
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#3

AW: Finden oder Übergeben mehrdimensionaler StringArrays

  Alt 9. Sep 2021, 12:48
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.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Finden oder Übergeben mehrdimensionaler StringArrays

  Alt 9. Sep 2021, 12:52
.. wenn Du eine zweite Parameter übergibst z.B. ArrayId:Integer

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

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#5

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

  Alt 9. Sep 2021, 12:57
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.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 9. Sep 2021, 13:02
ein Versuch:
Delphi-Quellcode:
type
  TBigArray = Array[0..1][0..26] of String;


procdure tuwas(aArray: TBigArray; arrayId);
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 9. Sep 2021, 13:25
Delphi-Quellcode:
Array of Array of ...
TArray<TArray<...>>
...

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 Test1([a, b, c]); geht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#8

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

  Alt 9. Sep 2021, 13:32
@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

Geändert von Cordt ( 9. Sep 2021 um 13:56 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 9. Sep 2021, 13:32
?

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.
  Mit Zitat antworten Zitat
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#10

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

  Alt 9. Sep 2021, 13:46
?

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.
  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 08:19 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