Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf zweidimensionales Array (https://www.delphipraxis.net/54140-zugriff-auf-zweidimensionales-array.html)

Nikolas 28. Sep 2005 17:27


Zugriff auf zweidimensionales Array
 
Hi,

Ich hab ein kleines Array (Daten = array[0..2] of word), von dem ich mehrere in einem größeren Array verwalte (MessReihe = array of Daten).

Jetzt will ich zu Testzwecken ein Messreihen array füllen.
Das per
Delphi-Quellcode:
AReihe[0,0]:=12;
AReihe[0,1]:=89;
AReihe[0,2]:=4;

AReihe[1,0]:=63; //...
ist ja nicht gerade schön zu schreiben oder lesen.

Deswegen wollte ich fragen, ob es nicht eine Alternative Syntax gibt, also so was a la
Delphi-Quellcode:
AReihe[0]:= [12;89;4]
.

Ich hab so was zwar noch nie gesehen, aber vielleicht kann man sich dadurch etwas Arbeit sparen...

Danke schonmal

himitsu 28. Sep 2005 17:31

Re: Zugriff auf zweidimensionales Array
 
Sowas geht leider nicht ... ich wollte auch mal sowas ... und ich glaub Sakura hatte mir damals auch ein NEIN entgegengeschmettert (irgendwo hier im Forum).

Das kannst du nur für vordefinierte Variablen, oder Constanten verwenden.
Mitten in 'ner Prozedure wird's halt nicht -.-''


Aber es ist dennoch möglich auf diese Weise eine Konstante zu erstellen und diese dann der Variable zuzuweisen.

NicoDE 28. Sep 2005 17:35

Re: Zugriff auf zweidimensionales Array
 
Soweit ich weiß nur, indem du Konstanten dafür definierst.
Delphi-Quellcode:
procedure Foo;
type
  TBar = array [0..1] of Byte;
const
  Alc: TBar = (4, 2);
var
  Bar: array [0..0] of TBar;
begin
  Bar[0] := Alc;
end;

Nikolas 28. Sep 2005 17:51

Re: Zugriff auf zweidimensionales Array
 
hm schade. Wie (falls es geht) könnte ich denn so eine mehrdimensionale Konstante deklarieren? Über die Hilfe bin ich jetzt an Typisierte und Array -Konstanten gekommen, nur hab ich da das Problem, dass ich Messreihe als dynamisches Array deklarieren muss und in der Hilfe werden nur statische erwähnt.

Hat schon Mal jemand so was erfolgreich gelöst?

// Ich habs jetzt wie Nico gelöst. Vielen Dank für den Tip.
// Was ist eigentlich mit den Roten Kasten los?

Eichhoernchen 28. Sep 2005 18:16

Re: Zugriff auf zweidimensionales Array
 
hmm es gibt doch Mengen?!

set of ...

das ist doch was er da Sucht mit:

Zitat:

AReihe[0]:= [12;89;4]
nur eben Komma statt Semikolon!

himitsu 28. Sep 2005 18:27

Re: Zugriff auf zweidimensionales Array
 
Äußerlich mag es zwar "gleich" aussehen,
aber Arrays und Sets sind dennoch zwei verschiedene Dinge :warn:

Phistev 28. Sep 2005 18:36

Re: Zugriff auf zweidimensionales Array
 
Mehrdimensionale Konstanten deklariert man so:
Delphi-Quellcode:
const bla: array [0..1] of array[0..1] of word = ((5, 8), (15, 485));

Khabarakh 28. Sep 2005 19:21

Re: Zugriff auf zweidimensionales Array
 
Wenn man das wirklich öfter braucht und keine Konstanten benutzen kann, könnte man ja ein "Funktions-Template" schreiben. Parameter als offenes Array, für dynamische Arrays müsste man nicht einmal den Rückgabewert gesondert deklarieren.

Eichhoernchen 28. Sep 2005 19:28

Re: Zugriff auf zweidimensionales Array
 
Zitat:

Zitat von himitsu
Äußerlich mag es zwar "gleich" aussehen,
aber Arrays und Sets sind dennoch zwei verschiedene Dinge :warn:


Ach mist ich hab net genau gelesen was er da genau wollte. Ich dachte er braucht einfach was wo er mehre Sachen drinn abspeichern kann. Wusste net das die Reihenfolge wichtig ist!

Christian18 28. Sep 2005 20:19

Re: Zugriff auf zweidimensionales Array
 
Hallo Toxman,

wie füllst du denn das Array mit Daten??? Vieleicht gibt es da ja eine möglichkeit. Gibtst du dieser per hand ein??? oder liest du die aus einer textfile aus??? oder DB(Datenbank)

MFG Christian18

Nikolas 28. Sep 2005 20:26

Re: Zugriff auf zweidimensionales Array
 
@ Christian18:

Ich erstelle sie per Hand und gebe sie auch manuell ein. Es ging mir insgesamt um eine Eingabemöglichkeit, bei der ich wenig schreiben muss und schnell einzelne Werte ändern kann.
Mit den Konstanten hats gut funktioniert.

Christian18 28. Sep 2005 20:30

Re: Zugriff auf zweidimensionales Array
 
Zitat:

Zitat von Toxman
@ Christian18:

Ich erstelle sie per Hand und gebe sie auch manuell ein. Es ging mir insgesamt um eine Eingabemöglichkeit, bei der ich wenig schreiben muss und schnell einzelne Werte ändern kann.
Mit den Konstanten hats gut funktioniert.

Hallo,

ich habe einen möglichkeit gefunden wie du das machen kannst. warte mal ich programmiere es nur noch schnell zuende, dann poste ich es hier mal

Christian18 28. Sep 2005 20:34

Re: Zugriff auf zweidimensionales Array
 
Hallo,

ich bin es nochmal. Ich habe die mal was fertig gemacht, damit du deine Messdaten so eingeben kannst wie du es oben in Deinem Beitrag geschrieben hast.

Hier der Code. Ich habe ihn auch noch ein bisschen dokumentiert, damit du durchsiehst.

Delphi-Quellcode:
procedure in_array_speichern(s : String);
  var i : Integer;       // Schleifenvariable
      a : Integer;       // Array Zugriffsvariable
      m : Array of String; // wären dann deine Messdaten
      k : Integer;       // Anzahl der ;
begin
  // Anzahl der ; ermitteln
  k:=0;
  for i:=1 to Length(s) do
    begin
      if s[i]=';' then Inc(k);
    end;

  SetLength(m, k+1);

  // String von ; trennen und im Array speichern
  a:=0;
  for i:=1 to Length(s) do
    begin
      if s[i]=';' then begin
        Inc(a);
      end else begin
        m[a]:=m[a] + s[i];
      end;
    end;

  // Messdaten einzeln ausgeben
  for i:=0 to a do
    begin
      ShowMessage(m[i]);
    end;
end;
zum aufrufen einfach:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  in_array_speichern('12;234;34;345;34');
end;

[NACHTRAG]

So gehts vieleicht noch ein bisschen schneller als mit den Konstanten.

[/NACHTRAG]

Mit freundlichen Grüßen

Christian18


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