Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Integer erkennen der nicht initalisiert wurde (https://www.delphipraxis.net/92651-integer-erkennen-der-nicht-initalisiert-wurde.html)

Andreas L. 23. Mai 2007 21:53


Integer erkennen der nicht initalisiert wurde
 
Hi,
ich habe folgenden Record

Delphi-Quellcode:
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;
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?

SirThornberry 23. Mai 2007 21:54

Re: Integer erkennen der nicht initalisiert wurde
 
das kannst du nicht feststellen (würde mich zumindest wundern).

Andreas L. 23. Mai 2007 21:56

Re: Integer erkennen der nicht initalisiert wurde
 
Kann man in records denn nicht auch irgendwie Standard-Werte festlegen. Ala bla: Integer = 0; ??

3_of_8 23. Mai 2007 21:57

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.

fwsp 23. Mai 2007 21:58

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:
const
  UnDef = -1
auf die du überprüfst.

Andreas L. 23. Mai 2007 21:59

Re: Integer erkennen der nicht initalisiert wurde
 
Delphi-Quellcode:
Du kannst sie nur initialisieren
und wie geht das in Verbindung mit meinen record?

mkinzler 23. Mai 2007 22:03

Re: Integer erkennen der nicht initalisiert wurde
 
Zitat:

und wie geht das in Verbindung mit meinen record?
Du mußt die Einzelnen Teilwerte mit Standards belegen.

3_of_8 23. Mai 2007 22:03

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.

Andreas L. 23. Mai 2007 22:08

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?

alzaimar 23. Mai 2007 22:12

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 00:30 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz