Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Reagieren auf Optionale Parameter (https://www.delphipraxis.net/13002-reagieren-auf-optionale-parameter.html)

Pseudemys Nelsoni 9. Dez 2003 10:55


Reagieren auf Optionale Parameter
 
Moin,

in meinem IRC-Chan habe ich einen TV-Bot, es gibt in dem bot 2 parameter (-l (limit) und -u (uhrzeit)). Das sieht dann bei eingabe ca so aus "!tv pro7 -u18 -l3"...
wenn das jemand schreibt werden die nächsten 3 sendungen ab 18 uhr auf pro7 angezeigt, ich habe die abfrage nach den parametern ziemlich umständlich gemacht und ich frage mich wie es aussieht wenn mal 10 paremeter oder mehr benötigt werden, da sind die kombinationionen wo und ob die parameter überhaupt da sind ja geradezu unendlich. Also ich habe es ca so gemacht (bei den 2 die ich habe. habe den code gerade nicht da, deswegen tu ichs mal nicht in delphi tags):

"wort" ist eine funktion die mirdas wort (der index) aus einem string gibt

also wort 1 ist ja "!tv", wort 2 ist "pro7"

if wort(3, s) = '-u' then // sucht das tv programm ab der uhrzeit die nach -u angegeben wurde
if wort(3, s) = '-l' then // gibt 3 sendungen aus
if (wort(3, s) = '-l') AND (wort(4, s) = '-u') then // sucht nach uhrzeit und gibt 3 sendungen aus
if (wort(3, s) = '-u') AND (wort(4, s) = '-l') then // sucht nach uhrzeit und gibt 3 sendungen aus


hier musste ich die letzte zeile doppelt angeben, da ich ja nicht weiss ob 3 -l oder -u ist, man soll sie ja angeben können wo man möchte. wenn ich z.b jetzt 10 parameter habe, dann habe ich ja unendliche "if"-prüfungen.
es ist schwer zu erklären was ich meine, aber wer z.b mirc kennt weiss was ich meine. Hoffe jemand kann mir helfen

mfg

choose 9. Dez 2003 11:18

Re: Reagieren auf Optionale Parameter
 
Warum machst Du es nicht so, wie bei optionalen Parametern zB bei INI-Dateien?

Ich stelle mit eine Klasse vor, die eine Menge von Parametern und deren Werte verknüpfen kann (ähnlich wie TIniFile), natürlich kannst Du das ganze auch mit einem großen String und div funktionen machen (hier eignen sich [dp]Reguläre Ausdrücke[/dp]).

Dann könnte die Klasse zB eine Methode zum Ermitteln, ob es einen Schlüssel (Parameternamen) gibt, implementieren
Delphi-Quellcode:
TMyClass.HasKey(const AName: string): Boolean
eine Methode, die tatsächlich den Wert des Schlüssels (Parameter) liest, nur intern verwendet wird und bei nicht-Existenz dieses Schlüssel eine Exception wirft
Delphi-Quellcode:
TMyClass.DoReadKey(const AName: string): string
Die tatsächliche Lösung für Dein Problem könnte dann so aussehen
Delphi-Quellcode:
TMyClass.ReadStringKey(const AName: string;
  const ADafault: string=''): string;
begin
  if HasKey(AKey) then
    Result:= DoReadKey(AName)
  else
    Result:= ADefault;
end;
bzw für Zahlenwerte
Delphi-Quellcode:
TMyClass.ReadIntKey(const AName: string;
  const ADefault: Integer = 0): Integer;
begin
  Result:= StrToInt(ReadStringKey(AKey, IntToStr(ADefault));
end;
und im Programm schreibst Du dann einfach
Delphi-Quellcode:
myUhrzeit:= myParams.ReadHourKey('u', DefaultHour);
myEntryCount:= myParams.ReadIntKey('l', DefaultEntryCount);
Die Beispiele sind nicht getestet!

Pseudemys Nelsoni 9. Dez 2003 11:27

Re: Reagieren auf Optionale Parameter
 
danke, mal guggn :)


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