Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Variable in for to do Schleife über I ansprechend (https://www.delphipraxis.net/200551-variable-do-schleife-ueber-i-ansprechend.html)

Dr. Jack 1. Mai 2019 09:19

Variable in for to do Schleife über I ansprechend
 
Hi zusammen,

ich habe folgende Variablen deklariert:

Vk_name1, vk_preis1,
Vk_name2, vk_preis2:String

Ich muss in einer for to do schleife die Variablen über I ansprechen.

Zum Beispiel schemenhaft:

For I:=1 to 3 do begin

Machwas := vk_name(I)
....
End;

Wie kann ich also die Variable in der Schleife
mit dem Schleifenzähler ansprechen?

mkinzler 1. Mai 2019 09:21

AW: Variable in for to do Schleife über I ansprechend
 
Am Besten verwendet man gleich einen Array.

jaenicke 1. Mai 2019 10:04

AW: Variable in for to do Schleife über I ansprechend
 
Wenn das so etwas wie eine kleine Kasse sein soll, würde sich für die Artikel eher eine generische Liste bzw. ein Dictionary mit entsprechenden Klassen anbieten.

Das hat den Vorteil, dass man alle Daten zu einem Artikel zusammen in einer Klasse hat. Ansonsten verteilt sich das über mehrere Arrays bzw. Variablen, was das nicht gerade übersichtlicher macht

dummzeuch 1. Mai 2019 10:07

AW: Variable in for to do Schleife über I ansprechend
 
Zitat:

Zitat von Dr. Jack (Beitrag 1431398)
ich habe folgende Variablen deklariert:

Vk_name1, vk_preis1,
Vk_name2, vk_preis2:String

Ich muss in einer for to do schleife die Variablen über I ansprechen.

Zum Beispiel schemenhaft:

For I:=1 to 3 do begin

Machwas := vk_name(I)
....
End;

Wie kann ich also die Variable in der Schleife
mit dem Schleifenzähler ansprechen?

Das geht schlichtweg so nicht. Du musst die Strings in einem Array speichern:

Delphi-Quellcode:
type
  TVKNameUndPreis: record
    Name: string;
    Preis: string; // wirklich string?
  end;
var
  VKArray: array[1..2] of TVKNameUndPreis;

// [...]
for i:=1 to 2 do begin
  MachWasMit(VKArray[i].Name, VKArray[i].Preis);
end;

uligerhardt 1. Mai 2019 12:02

AW: Variable in for to do Schleife über I ansprechend
 
Zitat:

Zitat von dummzeuch (Beitrag 1431403)
Delphi-Quellcode:
type
  TVKNameUndPreis: record
    Name: string;
    Preis: string; // wirklich string?
  end;
var
  VKArray: array[1..2] of TVKNameUndPreis;

// [...]
for i:=1 to 2 do begin
  MachWasMit(VKArray[i].Name, VKArray[i].Preis);
end;

U. U. sogar
Delphi-Quellcode:
for i := 1 to 2 do
begin
  VKArray[i].MachWasMit;
end;

freimatz 1. Mai 2019 13:32

AW: Variable in for to do Schleife über I ansprechend
 
Nach dem die Antworten hier teilweise nach dem Muster "wer findet noch was abgefahreneres um einen Anfänger zu verwirren?" hier noch mein Vorschlag:
Nachdem die Variablen im Speicher ja schön hintereinander liegen - er könnte sich die Adresse von Vk_name1 besorgen, in einen Pointer casten und dann je nach i sich die Adresse ausrechnen und zurück casten.
Das hat noch den riesen Vorteil, dass er seine Deklarationnicht anpassen muss. :wink:

Im Ernst: offensichtlich ist Dr. Jack ein Anfänger der gerade mal weiß was eine Schleife ist aber noch nichts von Arrays gehört hat. Da würde ich jetzt nicht schon Klassen, Records und noch höheres vorschlagen sondern nur array alleine

Also statt
Zitat:

Zitat von Dr. Jack (Beitrag 1431398)
Delphi-Quellcode:
Vk_name1, vk_preis1,
Vk_name2, vk_preis2:String

For I:=1 to 3 do begin

Machwas := vk_name(I)

dann

Zitat:

Zitat von Dr. Jack (Beitrag 1431398)
Delphi-Quellcode:
vk_name: array[1..3]: String;
vk_preis: array[1..3]: String;

For I:=1 to 3 do begin
Machwas := vk_name[I];
end;

Klar, hat das noch ein riesiges Verbesserungspotential. Aber so hat Dr. Jack ein Erfolgserlebnis, weiterhin Spass an Delphi und lernt dann gerne weiter.

Uwe Raabe 1. Mai 2019 13:41

AW: Variable in for to do Schleife über I ansprechend
 
Man kann es auch ganz pragmatisch machen und eine Funktion deklarieren, wobei der restliche Code unverändert bleibt:

Delphi-Quellcode:
function vk_name(Index: Integer): string;
begin
  case Index of
    1: result := vk_name1;
    2: result := vk_name2;
  else
    raise ERangeError.Create('invalid Index');
  end;
end;
Das wäre z.B. auch die bevorzugte Herangehensweise, wenn die Variablendeklaration nicht verändert werden kann.

hoika 1. Mai 2019 13:48

AW: Variable in for to do Schleife über I ansprechend
 
Hallo,
ähem,
i von 1 bis 3 und es gibt für 3 keine entsprechende Variable???

Die Richtung zum Array finde ich schon richtig. .

Dr. Jack 1. Mai 2019 14:17

AW: Variable in for to do Schleife über I ansprechend
 
Zitat:

Zitat von hoika (Beitrag 1431408)
Hallo,
ähem,
i von 1 bis 3 und es gibt für 3 keine entsprechende Variable???

Die Richtung zum Array finde ich schon richtig. .

Es gibt ca 30 Variablen. Erster Durchlauf Artikel 1 mit seinen Parametern also Preis Lagerort etc ...das wird mit 3 Durchläufen anschließend in eine DB geschrieben

hoika 1. Mai 2019 23:28

AW: Variable in for to do Schleife über I ansprechend
 
Hallo,
dann kürze Deine Variablen und nimm ein Array.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Seite 1 von 2  1 2      

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