Delphi-PRAXiS

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.

Jumpy 2. Mai 2019 08:12

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

Zitat von Dr. Jack (Beitrag 1431409)
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

Das klingt aber schon so, als ob der TE sich einmal mit OOP befassen sollte. Ein "Artikel mit seinen Parametern" ist doch ein Paradebeispiel für ein Objekt mit seinen Attributen.

hoika 2. Mai 2019 08:50

AW: Variable in for to do Schleife über I ansprechend
 
Hallo,
ich würde erst mal mit einem Array anfangen.
Dann sehe ich auch den Inhalt des Arrays bei "überwachte Ausdrücke" (Strg+F5).

TurboMagic 2. Mai 2019 17:18

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

Zitat von Jumpy (Beitrag 1431431)
Zitat:

Zitat von Dr. Jack (Beitrag 1431409)
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

Das klingt aber schon so, als ob der TE sich einmal mit OOP befassen sollte. Ein "Artikel mit seinen Parametern" ist doch ein Paradebeispiel für ein Objekt mit seinen Attributen.

Ja das klingt so. Es gibt ja vom Delphi Treff ein deutsches Einführungsheftchen da steht schon einiges drin.
Nur einen Kritikpunkt an dem hatte ich damals, als ich es mal in den Fingern hatte (über einen Studenten):
Das Kapitel über Dateiverarbeitung war doch sehr altbacke. File etc. statt TStringListe oder TStream etc.


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