Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion mit unendlicher Parameterzahl (https://www.delphipraxis.net/30410-funktion-mit-unendlicher-parameterzahl.html)

egal 24. Sep 2004 10:45


Funktion mit unendlicher Parameterzahl
 
Hallo, ich muss eine funktion schreiben, wo die Parameterzahl ein Benutzer festlegt, quasi so:
function test(index1, index2,..,indexn:integer): integer
Wie kann man das realisieren? Danke!

sakura 24. Sep 2004 10:51

Re: Funktion mit unendlicher Parameterzahl
 
Wie wäre es mit einem Hier im Forum suchenArray als Parameter :zwinker:

...:cat:...

LarsMiddendorf 24. Sep 2004 10:51

Re: Funktion mit unendlicher Parameterzahl
 
Code:
function test(index:array of integer): integer ;
Und dann mit z.B. mit test([1,2,3]) aufrufen.

Sebastian Nintemann 24. Sep 2004 10:52

Re: Funktion mit unendlicher Parameterzahl
 
Hallo egal!

Die DP-Suche führt dich zu diesem threat (habs nur noch gefunden weil ich wusste, dass es um concat ging). Dort wird beschrieben warum es nicht geht und wie man das Problem alternativ lösen kann.
Hoffe das hilft dir!

Viele Grüße, Sebastian

egal 24. Sep 2004 11:05

Re: Funktion mit unendlicher Parameterzahl
 
das wäre eine Möglichkeit. Die Funktion soll eigentlich so aussehen:

function test (cStr1:string,index1:integer,cStr2:string,index2:i nteger
,..., cStrn:string,indexn:integer, feldNr:integer): integer;

Und der Benutzer kann so z.B. eingeben:

test(a,1, b,2, c,3,...,100);

Wenn ich jetzt die Arrays benutze, muss ich die Function so deklarieren

test(cStr: array of String, index: array of integer,feldNr:integer);

oder doch irgendwie anders?

alcaeus 24. Sep 2004 11:07

Re: Funktion mit unendlicher Parameterzahl
 
Hi egal,

du kannst Arrays verwenden, oder wir können dir erklären warum du es tun musst :mrgreen:
Falls du dir das andere Thema durchgelesen hast, dann solltest du ja wissen, dass so eine Funktion nicht möglich ist.

Greetz
alcaeus

sakura 24. Sep 2004 11:14

Re: Funktion mit unendlicher Parameterzahl
 
Dann mache folgendes:
Delphi-Quellcode:
type
  TValue = record
    StrValue: String;
    IntValue: Integer;
  end;
  TValues = array of TValue;

[...]

procedure Test(Values: TValues);
var
  I: Integer;
begin
  for Low(Values) to High(Values) do
  begin
    // for each value do...
    [...]
  end;
end;
...:cat:...

static_cast 24. Sep 2004 11:15

Re: Funktion mit unendlicher Parameterzahl
 
Hi

könnte man nicht
Delphi-Quellcode:
procedure foo(bar:array of variant);
nehmen? kann man doch alles übergeben was man will!?

sakura 24. Sep 2004 11:17

Re: Funktion mit unendlicher Parameterzahl
 
Zitat:

Zitat von static_cast
könnte man nicht
Delphi-Quellcode:
procedure foo(bar:array of variant);
nehmen? kann man doch alles übergeben was man will!?

Ja, aber Variants sind aufgrund ihrer varianten Natur sehr langsam.

...:cat:...

egal 24. Sep 2004 11:59

Re: Funktion mit unendlicher Parameterzahl
 
Alles klar, dann nehme ich am besten records.
Allen vielen, vielen Dank für schnelle und umfangsreiche Hilfe!:mrgreen:

Chewie 24. Sep 2004 13:14

Re: Funktion mit unendlicher Parameterzahl
 
Äh, Leute, habt ihr etwas das array of const vergessen??

sakura 24. Sep 2004 13:16

Re: Funktion mit unendlicher Parameterzahl
 
Zitat:

Zitat von Chewie
Äh, Leute, habt ihr etwas das array of const vergessen??

Vergessen nicht, an der Stelle fand ich den nur nicht angebracht, da es um eine bestimmte Datenstruktur ging ;-)

...:cat:...

Chewie 24. Sep 2004 13:47

Re: Funktion mit unendlicher Parameterzahl
 
Zitat:

Zitat von sakura
Vergessen nicht, an der Stelle fand ich den nur nicht angebracht, da es um eine bestimmte Datenstruktur ging ;-)

Hm, OK, sind ja nur Integer. Aber es zu erwähnen schadet ja trotzdem nicht ;)

egal 24. Sep 2004 16:22

Re: Funktion mit unendlicher Parameterzahl
 
das klappt aber nicht ganz. Weil der Benutzer meine Funktion aufruft, die muss zukünftig in einer dll gespeichert werden und er schreibt, wie gewohnt:
test(a,1, b,2, c,3,...,100);
Und ich bekomme natürlich Fehlermeldungen, zu viele Parameter und so weiter. Um das zu vermeiden, muss ich zuerst den Funktionsname "test" abfangen, dann die Parameter in record schreiben und nur dann meine Funktion
Test(Values: TValues, feldNr:integer);
starten. So weit so gut, aber mir gefällt nicht besonders, dass ich diesen Funktionsnamen abfangen soll, vielleicht gibt's andere Möglichkeit oder?


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