![]() |
Integer erkennen der nicht initalisiert wurde
Hi,
ich habe folgenden Record
Delphi-Quellcode:
Bei einer meiner Funktionen muss später so ein record übergeben werden. Dabei müssen jedoch nicht alle Felder ausgefüllt werden. Damit ich später nicht irgendwelchen Datenmüll abspeichere überprüfe ich natürlich in meiner Funktion ob das jeweilige Feld einen Wert enthält. Jetzt gibts da aber ein Problem mit den Integern. Werden die nicht gesetzt haben die irgendeinen Wert. Wie kann ich jetzt herausfinden ob der User einen Wert übergeben hat oder ob das nur die Zufallszahl ist?
type
TTrack = record Location: String; //filename (also relative) or url, see TOptions Identifier: String; //file hash, etc... Title: String; Creator: String; //artist Annotation: String; //comment Info: String; //homepage for more informations Image: String; //e. g. a cover. URL or filename required Album: String; TrackNum: Integer; //track number/position in the playlist or on the cd Duration: Integer; //length in miliseconds Link: String; //link to some rdf code... see specs. end; |
Re: Integer erkennen der nicht initalisiert wurde
das kannst du nicht feststellen (würde mich zumindest wundern).
|
Re: Integer erkennen der nicht initalisiert wurde
Kann man in records denn nicht auch irgendwie Standard-Werte festlegen. Ala bla: Integer = 0; ??
|
Re: Integer erkennen der nicht initalisiert wurde
Nein. Du kannst sie nur initialisieren. Du kannst nicht definitiv sagen, ob eine Variable initialisiert wurde oder nicht.
|
Re: Integer erkennen der nicht initalisiert wurde
so wie ich das sehe, erwartest du dafür immer nur positve werte, definier doch eine negative konstante
Delphi-Quellcode:
auf die du überprüfst.
const
UnDef = -1 |
Re: Integer erkennen der nicht initalisiert wurde
Delphi-Quellcode:
und wie geht das in Verbindung mit meinen record?
Du kannst sie nur initialisieren
|
Re: Integer erkennen der nicht initalisiert wurde
Zitat:
|
Re: Integer erkennen der nicht initalisiert wurde
Kommt drauf an, mit was du das machen willst. Du kannst einen Boolean auf False setzen, einen Integer auf -1 oder einfach mit ZeroMemory den ganzen Record mit 0en überschreiben.
|
Re: Integer erkennen der nicht initalisiert wurde
Was ich da bau ist eine Komponente. D. h. ich kann nicht herausfinden wann der User den record benutzt. oder doch?
|
Re: Integer erkennen der nicht initalisiert wurde
Wenn Du für deine Werte definitiv wissen willst, ob sie mit einem Wert belegt wurden, oder nicht, dann kannst du Variants nehmen. Allen Unkenrufen zum Trotz sind die gar nicht so langsam, wie viele Puristen einem glaubhaft machen wollen (zumindest in Zeiten der GHz Prozessoeren nicht mehr).
Ein Variant ist ein polymorpher Datentyp, der also beliebige Werte (Strings, Arrays, Integer, Float 'you name it') annehmen kann. Daneben gibt es noch die wohldefinierten Werte 'Null' (also nix) sowie 'Unassigned'. Allerdings belegen Variants mehr Speicherplatz, als generische Datentypen. Wenn die genaue Größe deines Records also irrelevant ist, kann man Variants verwenden. Eine weitere Möglichkeit ist die Verwendung einer Klasse, wobei Du für jede Property 'X' noch eine weitere' Is_X_defined' deklarierst. Sobald erstmals schreibend auf die Eigenschaft 'X' zugegriffen wird, liefert 'Is_X_defined' true, sonst eben false. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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