Autor |
Beitrag |
delphinia
      
Beiträge: 131
XP Pro Sp2
Delphi 5 Standard
|
Verfasst: Mo 25.12.06 20:37
Moin,
erstmal sorry für diesen Titel aber anderes wusste ich mein Problem nicht zu beschreiben.
Ich möchte ne Funktion haben, die wie folgt aussehen soll
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function check_value(val:String); Begin
also kann ich nicht "function check_value(val:String) :Integer;" schreiben wenn es nen String ist! end; |
Wer hat eine Lösung für mich?
_________________ Gruss Doreen
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 25.12.06 20:46
Schau Dir mal Variant an ... Ist aber relativ unsauber ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 25.12.06 20:48
Es hindert Dich keiner dran, 2 Funktionen zu schreiben, die auf den jeweiligen Typ passen.
_________________ Gruß
Hansa
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 25.12.06 21:55
BenBE hat folgendes geschrieben: | Schau Dir mal Variant an ... Ist aber relativ unsauber ... |
Ich verstehe das nicht. Was ist daran unsauber? Overhead, ok. Etwas langsamer, auch. Aber unsauber?
Variants sollten immer dann (und eigentlich auch nur dann) verwendet werden, wenn der konkrete Datentyp zur Entwurfszeit nicht festlegt, aber dann sind sie einfach sehr sauber, sehr praktisch und sehr schnell (schneller als andere Lösungen).
Hinter Variants verbirgt sich doch nur ein (ok, der ist häßlich) variant record, aber Delphi macht uns doch das Leben leicht und kapselt das hinter dem Datentyp 'Variant',
_________________ Na denn, dann. Bis dann, denn.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 25.12.06 22:03
alzaimar hat folgendes geschrieben: | ...das Leben leicht und kapselt das hinter dem Datentyp 'Variant', |
Das ist ja gerade das "unsaubere".  Sieht auch nicht danach aus, dass der Datentyp unbekannt wäre. Ergo -> Finger weg davon. Macht eventuell viel Ärger. 
_________________ Gruß
Hansa
|
|
pacman1986
Hält's aus hier
Beiträge: 1
|
Verfasst: Mo 25.12.06 22:05
Titel: Wie wäre es mit trystrtoint
trystrtoint ist glaube ich das was du suchst
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 25.12.06 22:30
Titel: Re: Wie wäre es mit trystrtoint
pacman1986 hat folgendes geschrieben: | ..ist glaube ich das was du suchst |
ne. 
_________________ Gruß
Hansa
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 25.12.06 22:35
Mir fällt da nur so was ein (ist nur bedingt anwendbar auf dein Problem):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure check_value(Val: String; out Result: String); overload; begin end;
procedure check_value(Val: String; out Result: Integer); overload; begin end; |
oder
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| function check_value(Val: String): Boolean; overload; begin end;
function check_value(Val: Integer): Boolean; overload; begin end; |
Weiss nicht genau was du genau brauchst...
Aber wieso möchtest du das unbedingt in eine Funktion kapseln?
Vielleicht wäre es gut den Rest des Codes etwas besser zu gestalten 
Zuletzt bearbeitet von delfiphan am Di 26.12.06 00:36, insgesamt 2-mal bearbeitet
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 25.12.06 23:05
_________________ Na denn, dann. Bis dann, denn.
|
|
SirTwist
Hält's aus hier
Beiträge: 1
|
Verfasst: Di 26.12.06 01:58
delphinia hat folgendes geschrieben: | Wer hat eine Lösung für mich? |
Hm, die anderen Beiträge gehen eher in die Richtung, als ob der Übergabeparameter "val" variabel zu sein hat. Ich hatte Dich eher so verstanden, dass der Rückgabewert variabel sein soll, oder?
also bleiben Dir nur zwei Möglichkeiten: entweder eine überladene Funktion, bei der der Rückgabewert als "var"-Parameter übergeben wird oder zwei unterschiedliche Funktionsnamen. Eigentlich läuft beides aufs Gleiche hinaus.
Möglichkeit 1:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function check_value(val: String; var contents: String): Boolean; overload; begin end;
function check_value(val: String; var contents: Integer): Boolean; overload; var s: String; begin result := check_value(val, s); result := result and TryStrToInt(s, contents); end; |
Möglichkeit 2:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function check_value_str(val: String): String; begin ... end;
function check_value_int(val: String): Integer; begin result := StrToIntDef(check_value_str(val), -1); end; |
Wobei ich bei der zweiten Möglichkeit auf jeden Fall noch Default-Werte einbauen würde, um zu erkennen, ob der Wert vorhanden war oder nicht. Aber eigentlich gefällt mir vom stilistischen und so die Möglichkeit 1 ganz gut
Ich hoffe, das passt mehr zu Deinem Problem.
Gruß,
SirTwist
|
|