Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf Dynamisches array zugreifen ohne AV? (https://www.delphipraxis.net/44576-auf-dynamisches-array-zugreifen-ohne-av.html)

Pseudemys Nelsoni 21. Apr 2005 03:25


Auf Dynamisches array zugreifen ohne AV?
 
Moin,

ich habe ein dynamisches Array, von diesem möchte ich 3 Parameter an eine Prozedur übergeben, das Problem ist, das alle diese 3 optional sind, d.h das Array kann 1, 2 oder auch 3 bzw gar keine Parameter haben. Ich übergebe der Prozedur das ganze so:

Delphi-Quellcode:
proc(sArray[0], sArray[1], sArray[2]);
Natürlich kann es ja nun aber sein das mein Array gar keine 3 Felder hat und es kommt zu einer AV.
Was könnte ich da nun tun ausser jeden Parameter auf Existenz prüfen?
Am liebsten hätte ich es so, das da wo ein Feld nicht existiert einfach ein leerer String zurückgegeben wird.

Statische Arrays kommen nicht in Frage, da ich mit Length noch prüfen muss wieviele Felder wirklich existieren.

Luckie 21. Apr 2005 03:31

Re: Auf Dynamisches array zugreifen ohne AV?
 
Delphi-Quellcode:
type
  TMyDynArray = array of Integer;

procedure Foo(Param: TMyDynArray);
var
  len: Cardinal;
begin
  len := length(Param);
  case len of
    1:;
    2:;
    3:;
  end;
end;
Sprich: Übergib das Array als ganzes und werte es in der Prozedur aus.

Pseudemys Nelsoni 21. Apr 2005 03:49

Re: Auf Dynamisches array zugreifen ohne AV?
 
Danke Luckie, gute Idee.

Pseudemys Nelsoni 7. Jun 2005 11:29

Re: Auf Dynamisches array zugreifen ohne AV?
 
Moin,

so ganz klappt das doch nicht, also ich werte alle Commands bei einer Socketverbindung aus. Das heisst das ganze sieht ca so aus:

Delphi-Quellcode:
if Command = 'PART' then
begin
  if Assigned(FOnPart) then
    FOnPart(Self, Param[0], Param[1], Param[2]);
end else
if Command = 'QUIT' then
begin
  if Assigned(FOnQuit) then
    FOnQuit(Self, Param[2], Param[5], Param[1]);
end else
if Command = 'PRIVMSG' then
begin
  if Assigned(FOnMessage) then
    FOnMessage(Self, Param[2], Param[3], Param[4]);
end;
Das geht endlos so weiter. Ich denke nicht das es schoen wäre dort in jedem Command eine Case-Anweisung zu haben. Ich möchte einfach nur das keine AV auftritt wenn ich auf ein element zugreife das nicht existiert, sondern einfach das stattdessen ein leerer string übergeben wird (wie das bei konstanten arrays der fall ist). Einige Parameter sind optional, das heisst, bei z.b "PART" ist "Param[2]" nicht unbedingt vorhanden...

Gibts da sonst noch ne Lösung?

franktron 7. Jun 2005 12:04

Re: Auf Dynamisches array zugreifen ohne AV?
 
Du kann ste maximalen wert mit High(array) herauskriegen dann must du nur noch gucken ob daten da sind

Pseudemys Nelsoni 7. Jun 2005 12:16

Re: Auf Dynamisches array zugreifen ohne AV?
 
moin franktron, ich kenne high() zwar, da müsste ich dann aber in jedem event abfragen und mit case dementsprechend reagieren, das würde den code aber nicht schoen machen

Pseudemys Nelsoni 7. Jun 2005 12:27

Re: Auf Dynamisches array zugreifen ohne AV?
 
Hab schon,

hab einfach eine funktion in die prozedur eingebaut:

Delphi-Quellcode:
  function Param(const Params: array of string; Idx: Integer): string;
begin
  if (Idx > -1) and (Idx <= High(Params)) then
    Result := Params[Idx]
  else Result := '';
end;

mfg, und danke nochmal.


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