---
title: "Gämföra records"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/78373-gämföra-records"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2003-05-28T23:21:20.000Z"
updated: "2003-05-31T10:38:57.000Z"
replies: 7
views: 273
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/78373-gämföra-records"
---

# Gämföra records

## #1 — Alpha II, 2003-05-28T23:21Z

Varför kan jag inte gämföra records när jag kan tilldela en record en annan av samma typ?

Har en record som ser ut så här:

```
  TMapFormat = record
    id: integer;
    objfile: string;
    map : array [0..MapW, 0..MapH] of integer;
  end;
```

Och vill kolla om arrayen ändras genom att spara en kopia av strukturen.

```
if CurrentMap <> LAstMap then
```

Detta funkar inte :(

Permalänk: https://www.webforum.nu/p/78373

## #2 — UlfT, 2003-05-28T23:29Z

Den där typen av jämförelser brukar bara funka för enkla datatyper som int, long, float, etc. Du kan kolla om Delphi har någon funktion motsvarande "memcmp()". Med en sådan funktion skulle du kunna jämföra stora minnesblock.

Permalänk: https://www.webforum.nu/p/1066692

## #3 — Alpha II, 2003-05-29T10:16Z

vet inte vad jag ska söka på... verkar inte finnas i memory rutines eller vad det kllas i hjälpen iaf :l

Permalänk: https://www.webforum.nu/p/1066827

## #4 — Alpha II, 2003-05-29T10:39Z

okej. nu har jag hittat funkationen MemoryCompare men jag vet inte hur jag ska använda den eftersom den alltidd returnerar false :(

Permalänk: https://www.webforum.nu/p/1066842

## #5 — Alpha II, 2003-05-29T10:41Z

```
CompareMem(@struct1,@struct1,sizeof(TStruct))
```

Returnerar true.

```
struct2 := struct1;
CompareMem(@struct1,@struct2,sizeof(TStruct))
```

Returnerar false. Varför? De innehåller ju samma data!

Permalänk: https://www.webforum.nu/p/1066845

## #6 — UlfT, 2003-05-29T11:46Z

> **Alpha II skrev:**
>
> ```
> struct2 := struct1;
> CompareMem(@struct1,@struct2,sizeof(TStruct))
> ```
>
> 
> 
> Returnerar false. Varför? De innehåller ju samma data!

Innehåller de även samma id och objfile? Gissningsvis har de olika id. I så fall kommer CompareMem att hitta en skillnad i minnesblocket redan där. Du kanske skulle jämföra enbart medlemmen "map" med hjälp av CompareMem. Då skulle du sannolikt lyckas bättre. Du kanske ska jämföra även objfile, men det beror ju på hur du har tänkt dig att programmet ska fungera.

Permalänk: https://www.webforum.nu/p/1066874

## #7 — Alpha II, 2003-05-29T22:27Z

Ja de innehåller exakt samma sak om jag tilldelade struct1 tilll struct2 :) Antar jag iaf...

Denna kod funkar i mitt riktiga program men i en litet test program jag skrev funkade det inte

Permalänk: https://www.webforum.nu/p/1067335

## #8 — UlfT, 2003-05-31T10:38Z

Om man gör en parallell med C, skulle medlemmen "map" vara en pekare mot en matris av integers. Då kommer pekaren i de båda structerna peka mot varsitt minnesblock, som iofs kan innehålla samma saker, men eftersom det är två skilda minnesblock, kommer adresserna i pekarna vara olika. Därför kommer "CompareMem"-jämförelsen resultera i att structerna skiljer sig från varandra. Pröva därför att jämföra "id" och "objfile" för sig, och sedan "map" med hjälp av "CompareMem". Du får alltså göra flera jämförelser för att ta reda på om structerna innehåller likadana data.

Permalänk: https://www.webforum.nu/p/1068218

---

Tråden på webben: https://www.webforum.nu/amne/programmering/78373-gämföra-records
