Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Durchlaufen eines Records (https://www.delphipraxis.net/104213-durchlaufen-eines-records.html)

DelphiManiac 29. Nov 2007 10:49


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:
 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;
      ....
Ist dies möglich, oder muss ich einen anderen Weg finden?

Gruß und danke Euch!

Bernhard Geyer 29. Nov 2007 10:53

Re: Durchlaufen eines Records
 
Und was sollt 0xFFFF bei einem String bzw. einem Extended bedeuten?

DelphiManiac 29. Nov 2007 11:36

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ß

shmia 29. Nov 2007 12:17

Re: Durchlaufen eines Records
 
Mach doch aus dem Record eine Klasse!!
Damit eröffnest du dir völlig neue Möglichkeiten.

Muetze1 29. Nov 2007 12:33

Re: Durchlaufen eines Records
 
Willste wissen ob der gesamte Record Speicherplatz mit 0xff gefüllt ist?

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

DelphiManiac 29. Nov 2007 14:07

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

shmia 29. Nov 2007 14:34

Re: Durchlaufen eines Records
 
Zitat:

Zitat von DelphiManiac
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 :-)

Gut, dann hat's ja geschnackelt. :hi:
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