Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array durchlaufen und Werte rauslesen (https://www.delphipraxis.net/84235-array-durchlaufen-und-werte-rauslesen.html)

Helmi 13. Jan 2007 18:15


Array durchlaufen und Werte rauslesen
 
Hallo,

ich steh gerade auf dem Schlauch

ich möchte gerade mit einer for-schleife durch ein "festdefiniertes" Array gehen.

also so:
Delphi-Quellcode:
var
 Bool: array [1, 2, 4, 8, 16, 32, 64, 128] of Integer;     //<--- geht nicht
begin
  Wert := 0;

  for i := 1 to 8 do
    begin
      //
      Wert := Wert + (Integer(dummy_CheckBox) * Bool[i]);
    end;
nur so meckert mir Delphi die markierte Zeile an
Zitat:

[Fehler] Unit1.pas(245): '..' erwartet, aber ',' gefunden
irgendwie verständlich.

Nur, wie kann ich in der Schleife den Wert eines bestimmten Array-Feld rauslesen?

3_of_8 13. Jan 2007 18:18

Re: Array durchlaufen und Werte rauslesen
 
Delphi-Quellcode:
Bool: array [1..8] of Integer=(1, 2, 4, 8, 16, 32, 64, 128);
Mit einem shl ginge das allerdings noch viel einfacher.

Helmi 13. Jan 2007 18:21

Re: Array durchlaufen und Werte rauslesen
 
Zitat:

Zitat von 3_of_8
Mit einem shl ginge das allerdings noch viel einfacher.

Wie würd das gehen mit shl?

[Edit]
Wenn ich
Delphi-Quellcode:
Bool: array [1..8] of Integer=(1, 2, 4, 8, 16, 32, 64, 128);
in den Var-Teil der Procedure einfüge erhalte ich die Meldung:
[Fehler] Unit1.pas(245): Lokale Variablen können nicht initialisiert werden

marabu 13. Jan 2007 18:28

Re: Array durchlaufen und Werte rauslesen
 
Hallo Helmi,

was Manuel sicher meinte ist: Schenke dir die lokale Array-Variable und ersetze "Bool[5]" durch "1 shl 5".

Grüße vom marabu

Martin K 13. Jan 2007 18:29

Re: Array durchlaufen und Werte rauslesen
 
Sollte so gehen:
Delphi-Quellcode:
var
  i: Integer;
  Bool: array [1..8] of Integer;
begin
  for i := 0 to 7 do
    Bool[i + 1] := 1 shl i;
end;
shl verschiebt die Bits nach links, 1 shl i verschiebt also die 1 um i Bits nach links.

[Nachtrag]
Natürlich kannst du es auch direkt so machen, und dir das array komplett schenken (meinte marabu sicherlich auch so), lass dann aber die FOR-Schleife mit 0 beginnen, da 1 shl 0 logischerweise wieder 1 ergibt, 1 shl 1 wäre aber schon 2 (Binär: 10).
Delphi-Quellcode:
for i := 0 to 7 do
begin
  // 
  Wert := Wert + (Integer(dummy_CheckBox) * (1 shl i)); //bin mir nicht sicher, ob man die Klammern beim shl braucht, warscheinlich kannst du sie auch wegalssen
end;

p0w3r5tr34m3r 13. Jan 2007 18:33

Re: Array durchlaufen und Werte rauslesen
 
das array was du nlegen wolltest, musst du als konstante anlegen..

Delphi-Quellcode:
const
  bool: array[0..8] of integer = (1, 2, 4, 8, 16, 32, 64, 128);
var
  i   : integer;
  wert : integer;
begin
  for i := low(bool) to high(bool) do begin
    wert := wert + (integer(dummy_checkbox) * bool[i]);
  end;
end;
MfG p0w3r5tr34m3r

Helmi 13. Jan 2007 18:39

Re: Array durchlaufen und Werte rauslesen
 
Vielen Dank!

Hat funktioniert!

3_of_8 13. Jan 2007 18:46

Re: Array durchlaufen und Werte rauslesen
 
Delphi-Quellcode:
var
  I: integer;
  wert: integer;
begin
  for I:=0 to 7 do
  begin
    wert:=wert+(integer(dummy_checkbox)*1 shl I);
  end;
end;

Hawkeye219 13. Jan 2007 19:18

Re: Array durchlaufen und Werte rauslesen
 
Hallo Helmi,

der Name dummy_CheckBox ist sehr unglücklich gewählt. Er läßt den Leser deines Codes vermuten, daß es sich dabei um einen Zeiger auf eine TCheckBox-Komponente handelt und nicht um einen (booleschen?) Wert. Und da in der Schleife immer derselbe Wert verrechnet wird, verstehe ich nicht, warum du überhaupt eine Schleife verwendest - eine einfache Multiplikation mit dem Wert 255 hätte auch gereicht. Oder war das nur ein vereinfachtes Beispiel?

Gruß Hawkeye

Helmi 13. Jan 2007 19:24

Re: Array durchlaufen und Werte rauslesen
 
Hallo Hawkeye,

dummy_CheckBox ist nur ein Zeiger auf eine CheckBox.

Oben ist leider ein Fehler in den Codes - es sollte natürlich
Delphi-Quellcode:
Integer(dummy_CheckBox.checked)
heissen.

3_of_8 13. Jan 2007 19:31

Re: Array durchlaufen und Werte rauslesen
 
Ein Zeiger auf eine CheckBox oder ein Instanzenpointer einer CheckBox? Wenn ersteres, dann würde ich ihn explizit dereferenzieren, das hilft der Lesbarkeit.

Helmi 13. Jan 2007 19:42

Re: Array durchlaufen und Werte rauslesen
 
der komplette Code schaut so aus:
Delphi-Quellcode:
  Wert := 0;

  for i := 1 to 8 do
    begin
      //ALeds nach CheckBox-Zustände anzeigen
      S := 'CheckBox_Ausgang_%d';
      dummy_CheckBox := FindComponent(Format(S, [i])) as TCheckBox;

      S := 'ALed_Ausgang_%d';
      dummy_ALed     := FindComponent(Format(S, [i])) as TALed;

      dummy_ALed.Checked := dummy_CheckBox.Checked;

      //
      Wert := Wert + (Integer(dummy_CheckBox.Checked) * (1 shl Pred(i)));
    end;
aber denkt ihr nicht, dass wir allmählich ot werden?

3_of_8 13. Jan 2007 19:52

Re: Array durchlaufen und Werte rauslesen
 
Also ist es der Instanzenpointer einer Checkbox. Oder einfacher gesagt: Eine Checkbox.

EDIT: Achja übrigens, FindComponent/FindControl ist relativ schlechter Stil.


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