![]() |
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:
Natürlich kann es ja nun aber sein das mein Array gar keine 3 Felder hat und es kommt zu einer AV.
proc(sArray[0], sArray[1], sArray[2]);
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. |
Re: Auf Dynamisches array zugreifen ohne AV?
Delphi-Quellcode:
Sprich: Übergib das Array als ganzes und werte es in der Prozedur aus.
type
TMyDynArray = array of Integer; procedure Foo(Param: TMyDynArray); var len: Cardinal; begin len := length(Param); case len of 1:; 2:; 3:; end; end; |
Re: Auf Dynamisches array zugreifen ohne AV?
Danke Luckie, gute Idee.
|
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:
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...
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; Gibts da sonst noch ne Lösung? |
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
|
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
|
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