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
Thema durchsuchen
Ansicht
Themen-Optionen

[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
Benutzerbild von himitsu
himitsu

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

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Cordt

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

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.079 Beiträge
 
Delphi 10.4 Sydney
 
#3

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
 
#4

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
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
386 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

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

  Alt 9. Sep 2021, 13:56
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.
Niemenad hindert Dich daran, aus dem Const ein Var zu machen und diese dann zur Laufzeit dynamisch zu füllen.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
251 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 9. Sep 2021, 14:03
So könnte es gehen:

Delphi-Quellcode:
unit Unit1;

interface

type
  TMyArray = Array of Array of String;

  Procedure DoStuffWithAnArray(IrgendeinArray: TMyArray);

implementation

Procedure DoStuffWithAnArray(IrgendeinArray: TMyArray);
begin
  {TODO -oOwner -cGeneral : ActionItem}
end;

end.
  Mit Zitat antworten Zitat
Cordt

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

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

  Alt 9. Sep 2021, 14:23
Edefix, ja so geht es, Dank dir.
Konsequentes zu Ende Denken der Dinge, die man schon gelesen hat hätte hier helfen können, aber jetzt weiß ich es. Danke euch allen für die wieder super schnelle Beantwortung, Hilfe und Mühe!
Lg Cordt
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 04:26 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