AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Records vergleichen (Binärvergleich)

Ein Thema von hoika · begonnen am 17. Mär 2017 · letzter Beitrag vom 17. Mär 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

2 Records vergleichen (Binärvergleich)

  Alt 17. Mär 2017, 10:28
Hallo,
ich habe 4 Records

Rec1_1 und Rec1_2 sind vom TRec1, Rec2_1 und Rec2_2 sind vom TRec2.
Sie enthalten keine dynamischen Datentypen (also String oder dyn. Arrays).

Wie könnte ich jetzt Rec1_1 und Rec1_2 auf Gleichheit prüfen,
ohne die Datentypen zu kennen.
Das gleiche dann für die anderen beiden Rec2s.

Die Länge würdeich per SizeOf mitgeben.
function IsEqual(Pointer1, Pointer2, Length).

Ich müsste den Record also serialisieren, dann könnte ich einen Stream-Vergelcih machen.
nur wie serialisiere ich einen Record in einen ByteStream?


Jemand eine Idee?


Hm, dass könnte vielleicht klappen:
http://stackoverflow.com/questions/8...re-to-a-stream
Heiko

Geändert von hoika (17. Mär 2017 um 10:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: 2 Records vergleichen (Binärvergleich)

  Alt 17. Mär 2017, 10:32
CompareMem ist das einfachste

Edit: Wollte grad noch Code nachreichen und dann hab ich gesehn dass Uwe Raabe genau diesen schon gepostet hat.
Trotzdem mal eine alternative Version die evtl. etwas angenehmer aufzurufen ist:
Delphi-Quellcode:
function IsEqual(var Rec1; var Rec2; Size: Integer): Boolean;
begin
  Result := CompareMem(@Rec1, @Rec2, Size);
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (17. Mär 2017 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#3

AW: 2 Records vergleichen (Binärvergleich)

  Alt 17. Mär 2017, 10:36
Was spricht gegen einen direkten Memory-Vergleich?

Delphi-Quellcode:
function IsEqual(Pointer1, Pointer2: Pointer; Size: Cardinal): Boolean; inline;
begin
  Result := CompareMem(Pointer1, Pointer2, Size);
end;
Oder direkt CompareMem verwenden.

Edit: Roter Kasten?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
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