![]() |
Durchlaufen eines Records
Hallo,
ich habe folgendes Problem, ich habe einen Record, der mehrere Datentypen in sich trägt, diesen würde ich gerne durchlaufen (von der 1. bis zur letzten Variable) und diese auf einen bestimmten Wert prüfen (0xFFFF). Mein Record sieht folgendermaßen aus:
Delphi-Quellcode:
Ist dies möglich, oder muss ich einen anderen Weg finden?
TSitzung =record
Identifier :Integer; HerstellDatum :ShortString; Seriennummer :ShortString; GeraeteTyp :ShortString; Sensortyp :Shortstring; SoftwareVersion :ShortString; SoftwareDatum :ShortString; SoftwareRelease :integer; SoftwareSubRelease:integer; Sprache :Integer; Druck :Extended; Druck_old :Extended; Temp :Extended; Temp_old :Extended; TempOffset :Smallint; CO2 :Extended; CO2_old :Extended; ADCDruck :Smallint; ADCDruck_Old :Smallint; ADCDruckGain :integer; ADCDruckSF :integer; ADCDruckFS :Smallint; ADCDruckHS :Smallint; ADCDruckLS :Smallint; ADCDruckOffset :double; ADCTempFS :Smallint; ADCTempHS :Smallint; ADCTempLS :Smallint; ADCTemp :integer; ADCTemp_old :integer; ADCTempGain :integer; ADCTempSF :integer; DAC1_4mA :integer; DAC1_20mA :integer; DAC2_4mA :integer; DAC2_20mA :integer; PRef :Single; TRef :Single; Co2Offset :Single; AlarmHH :Integer; AlarmH :Integer; AlarmL :Integer; .... Gruß und danke Euch! |
Re: Durchlaufen eines Records
Und was sollt 0xFFFF bei einem String bzw. einem Extended bedeuten?
|
Re: Durchlaufen eines Records
Nunja bei einem String müsste es 0xFF als ASCII sein,
(so ein Sonderzeichen *y) Aber mir geht es eigentlich um die Ganzzahlen, denke, dass ist nicht ohne weiteres möglich müsste wahrscheinlich ein typgleichen record erstellen, oder? Gruß |
Re: Durchlaufen eines Records
Mach doch aus dem Record eine Klasse!!
Damit eröffnest du dir völlig neue Möglichkeiten. |
Re: Durchlaufen eines Records
Willste wissen ob der gesamte Record Speicherplatz mit 0xff gefüllt ist?
Delphi-Quellcode:
Aber grundsätzlich hast du ein Designproblem, wenn du bei einem Record so etwas abfragen müsstest. Ich lege dir auch shmia Vorschlag an's Herz.
function IsInvalid(ARecord: TSitzung): boolean;
var lPtr: PByte; lEnd: Pointer; begin result := true; lPtr := @ARecord; lEnd := lPtr; Inc(lEnd, SizeOf(TSitzung)); while ( lEnd < lPtr ) do begin if lPtr^ <> $ff then begin result := false; break; end; Inc(lPtr); end; end; |
Re: Durchlaufen eines Records
Ihr habt recht OOP lässt grüßen.. :-)
Nungut, dann mach ich mir eine Klasse die mir eine Methode anbietet, die dieses überprüfung implementiert :-) Also danke schonmal. Gruß DelphiManiac |
Re: Durchlaufen eines Records
Zitat:
Wenn ich mir die Daten in dem Record so ansehe, können's auch 2 oder mehr Klassen werden. Objekte lassen sich ja auch verschachteln, bzw. man kann ein Objekt in ein Anderes einbetten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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