AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisches Array indizieren

Ein Thema von DelphiManiac · begonnen am 16. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Dynamisches Array indizieren

  Alt 16. Jan 2007, 14:26
Hallo,

ich brauche für meine Anwendung ein 2 Dimensionales dynamisches Array.
Ich lese eine Datei aus, und weiß weder am Anfang wieviel Zeilen, noch wieviel ASCII's drin stehen.

Delphi-Quellcode:
..
var
  DynArr:array of array of byte;
begin
 SetLengt(DynArr,10); // 10 Zeilen
 Set... // 30 Zeichen???
...
Wie kann ich nun mein Array indizieren, so dass es Beispiel:
eine Größe von DynArr[1..10][1..30] hat.
Will das natürlich zur Laufzeit machen (deshalb ja dynamisch).
Hoffe ihr habt mein Prob verstanden.

Danke schonmal im Vorraus

Gruß
DelphiManiac
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 14:29
Zitat von Delphi 7 Hilfe:
Zur Deklaration von mehrdimensionalen dynamischen Arrays verwenden Sie aufeinander folgende array of ...-Konstruktionen. Ein Beispiel:

Delphi-Quellcode:
type TMessageGrid = array of array of string;
var Msgs: TMessageGrid;
Hier wird ein zweidimensionales String-Array deklariert. Um dieses Array zu instantiieren, rufen Sie SetLength mit zwei Integer-Argumenten auf. Wenn beispielsweise I und J Integer-Variablen sind, wird Speicherplatz für ein I mal J großes Array zugewiesen:

SetLength(Msgs,I,J); Msgs[0,0] bezeichnet dann ein Element dieses Arrays.

Sie können auch mehrdimensionale dynamische Arrays anlegen, die nicht gleichförmig sind. Rufen Sie dazu als Erstes die Funktion SetLength auf, und übergeben Sie ihr Parameter für die ersten n Dimensionen des Arrays:

Delphi-Quellcode:
var Ints: array of array of Integer;
SetLength(Ints,10);
Mit dieser Anweisung weisen Sie dem Array Ints Speicherplatz für zehn Zeilen zu. Den Speicher für die Spalten können Sie später einzeln zuweisen (und dabei unterschiedliche Längen angeben):

SetLength(Ints[2], 5); Die dritte Spalte von Ints kann damit fünf Integer-Werte aufnehmen, und Sie können ihr nun Werte zuweisen (auch wenn die anderen Spalten nicht zugewiesen sind), z. B. Ints[2,4] := 6.

Im folgenden Beispiel wird mithilfe von dynamischen Arrays (und der in der Unit SysUtils deklarierten Funktion IntToStr) eine ungleichförmige String-Matrix erstellt:

Delphi-Quellcode:
var
  A : array of array of string;
  I, J : Integer;
begin
  SetLength(A, 10);
  for I := Low(A) to High(A) do
  begin
    SetLength(A[I], I);
    for J := Low(A[I]) to High(A[I]) do
      A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 14:30
Delphi-Quellcode:
SetLengt(DynArr,10);
for i := 0 to 9 do
SetLength(DynArr[i],30));
edit: War zu langsam
Richard Mahr
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#4

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 14:32
Hi,

Danke für die schnelle Antwort!!!
Also gibt es doch eine überladene Funktion von SetLength!!

Irgendwie war das aus der Delphi-Hilfe nicht so ersichtlich....

Naja danke nochmal
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 15:18
Moin DelphiManiac,

Zitat von DelphiManiac:
Also gibt es doch eine überladene Funktion von SetLength!!
Jein.
Diese Funktion basiert auf Compiler-Magic (wie, z.B. auch Inc, Dec), sie existiert so als Funktion nicht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#6

Re: Dynamisches Array Länge feststellen

  Alt 16. Jan 2007, 15:37
Hallo,

ja stimmt da hast du Recht,

hab noch ne andere Frage:

Wie bekomme ich zur Laufzeit die Größe meiner 2 Dimensionen des Arrays heraus??
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#7

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 15:50
Delphi-Quellcode:
rows := high(DynArray)+1;
cols := high(DynArray[0])+1;
Musst nur aufpassen, wenn DynArray noch 0 Elemente hat...also davor das abfangen

Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Dynamisches Array indizieren

  Alt 16. Jan 2007, 15:53
Length(Array); Oder halt die 2 Dimension von:
Length(Array[x]); Wobei x für das Element steht, wessen Dimension du rausbekommen möchtest und Array für deinen Array.
  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 05:39 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