Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamisches Array: Terminierung auf 1 (https://www.delphipraxis.net/48499-dynamisches-array-terminierung-auf-1-a.html)

Garfield 26. Jun 2005 12:58


Dynamisches Array: Terminierung auf 1
 
Ich hatte vor einiger Zeit ein Programm in Delphi 3 Professional begonnen und dann in Delphi 7 Personal weitergeführt. Darin verwende ich ein statisches Array, welches ich damals der Einfachheit halber mit 1 terminiert hatte. Nun möchte ich daraus ein dynamisches Array machen. Dynamische Arrays sind jedoch nullterminiert. Das Umstellen auf die andere Terminierung ist sehr aufwändig und trotz mehrerer Stunden Arbeit erhalte ich immer wieder neue Fehlermeldungen. Deshalb würde ich gern die Terminierung von 0 auf 1 ändern. Leider habe ich dazu nichts gefunden.

Khabarakh 26. Jun 2005 13:22

Re: Dynamisches Array: Terminierung auf 1
 
Das geht AFAIK mit dynamischen Arrays einfach nicht, hättest du halt gleich normgemäß nullterminiert angefangen :wink: . Aber du könntest das ObjectList-Template von alcaeus nehmen und den Getter und Setter von Items ändern, sodass du mit 1 terminiert darauf zugreifen kannst. Da Items default ist, sollte sich wenig Code ändern.

marabu 26. Jun 2005 13:26

Re: Dynamisches Array: Terminierung auf 1
 
Hallo Garfield,

du solltest deine array Addressierung grundsätzlich auf die Verwendung von High() und Low() umstellen, dann hast du nie wieder Probleme:

Delphi-Quellcode:
var
  sa: array [1..10] of integer;
  da: array of integer;
  i, j, iValue: integer;
begin
  SetLength(da, 10);

  iValue := 0;
  for i := Low(sa) to High(sa) do begin
    Inc(iValue);
    sa[i] := iValue;
  end;

  j := Low(sa);
  for i := Low(da) to High(da) do begin
    da[i] := sa[j];
    Inc(j);
  end;
end;
Grüße vom marabu

Phistev 26. Jun 2005 14:17

Re: Dynamisches Array: Terminierung auf 1
 
Statt alles auf Nullterminierung umzustellen, könntest du auch einfach das nullte Element nicht benutzen und das dyn. Array ein Element größer machen

Garfield 26. Jun 2005 16:53

Re: Dynamisches Array: Terminierung auf 1
 
Als ich mit dem Programm angefangen habe, kam mir die Terminierung mit 1 sehr entgegen und auf älteren Delphi-Seiten sieht man sie auch noch öfter. Nachdem ich den Text teilweise geändert hatte, kam ich auch auf die Idee von Phistev. Doch dann dachte ich, man könnte die Terminierung vielleicht elegant mit einem Befehl wie SetIndex () oder ähnliches ändern. Allerdings fand ich in der Hilfe nichts dazu.

Nun scheint mir diese Vatinate die einfachste zu sein wenn ich nicht den Quelltext Zeile für Zeile durchsuchen und die Argumente für das Array um 1 reduzieren will.

Auf jeden Fall vielen Dank für Eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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