Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arrays vergleichen (https://www.delphipraxis.net/2281-arrays-vergleichen.html)

nailor 15. Jan 2003 20:15


Arrays vergleichen
 
1. warum geht:
Delphi-Quellcode:
const a: array[0..0] = (1)
aber
Delphi-Quellcode:
const a: array[0..0] = 1
gibt eine Access Violation? Und
Delphi-Quellcode:
const a: array[0] = 1
geht erst gar nicht?


2. kann man irgendwie
Delphi-Quellcode:
const a: array[0..0] = (1); b: array[0..0] = (1);
...
if a = b then...
in der Art zum laufen kriegen?

Daniel B 15. Jan 2003 20:18

Hi,

versuchs mal damit:
Delphi-Quellcode:
if a[0] = b[0] then Exit; //Wenn der erste Datensatz vom a-Array, gleich den ersten Datensatz vom b-Arrays ist, dann spring aus der Prozedur raus
Grüsse, Daniel :hi:

d3g 15. Jan 2003 20:19

Hi Nailor,

Nr. 1: Dies ist korrekte Pascal-Syntax, weil die in Klammern angegebene 1 dem ersten Item 1 zuweist (und es gibt nur ein Item).

Nr. 2: Ich bin mir nicht ganz sicher, wie Arrays unter Delphi intern behandlet werden, wenn Arrays aber wie unter C++ eigentlich Pointer sind, dann verlegst du mit dieser Anweisung dein Array an die Speicherstelle 1, das führt zur Access Violation.

Nr 3: Arrays in ObjectPascal müssen einen oberen und unteren Index haben-

MfG,
d3g

Hansa 15. Jan 2003 20:22

Hi,

Konstanten-Array-Values müssen immer in Klammern stehen. Falls ich mich nicht irre. :mrgreen:

Gruß
Hansa

sakura 15. Jan 2003 20:24

Und zum letzten. Delphi erkennt nicht, dass Array a und Array b vom gleichen Typ sind. Du musst erst einen einheitlichen Typ deklarieren und diesen nutzen. Dann kannst Du a mit b vergleichen.
Delphi-Quellcode:
type
  TNullNullArray = array[0..0] of Byte;

const
  a: TNullNullArray = (1);
  b: TNullNullArray = (1);
...:cat:...

nailor 15. Jan 2003 20:30

@sakura:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TType = array[0..3] of byte;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a: TType = (1,2,3,4);
  b: TType = (1,2,3,4);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if a = b then close;
end;

end.
--> [Error] Unit1.pas(31): Operator not applicable to this operand type

@Daniel: Das kann ich selber, aber dafür bin ich zu faul. Ich will eine einzige Abfrage, um zu wissen, ob die Dinger gleich sind.[/quote]

sakura 15. Jan 2003 20:40

:oops: Ich falle immer wieder drauf rein :oops: Aus der Delphi Hilfe
Delphi-Quellcode:
function Equal(var Source, Dest; Size: Integer): Boolean;

type
  TBytes = array[0..MaxInt - 1] of Byte;
var
  N: Integer;
begin
  N := 0;
  while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do
    Inc(N);
  Equal := N = Size;
end;

Daniel B 15. Jan 2003 20:40

Zitat:

Zitat von Nailor
@Daniel: Das kann ich selber, aber dafür bin ich zu faul. Ich will eine einzige Abfrage, um zu wissen, ob die Dinger gleich sind.

Delphi-Quellcode:
var
  MyVar: Integer;
Delphi-Quellcode:
begin
  for i := 0 to MaxArray -1 do
  begin
    if a[i] = b[i] then MyVar := MyVar +1;
  end;
  if MyVar = MaxArray -1 then Exit;
end;
Eine Abfrage, ob alle gleich sind.
Meinst Du sowas?

Grüsse, Daniel :hi:

nailor 15. Jan 2003 20:54

So ähnlich hab ich das bis jetzt auch gemacht, nur hab ich mich gefragt, ob ich nicht irgendwie blöd bin, weil ich keine zwei arrays miteinander verglichen bekomme. Aber anscheinend geht das gar nicht so wie ich gedacht habe, dass es irgendwie gehen muss.

Motzi 15. Jan 2003 22:37

Es geht aber auch einfacher über CompareMem (vorrausgesetzt a und b sind vom selben Typ):

if CompareMem(@a, @b, SizeOf(a)) then ShowMessage('Sind ident');


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 1 von 2  1 2      

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