[Gelöst]c/al : for each in (a, b, c) ???

26. Oktober 2012 20:11

Hallo zusammen,
kann man in NAV etwas wie "for each 'variable' in [T1, T2, T3 ] do begin 'funktion(variable)' end; programmieren ?
Ich möchte also für jedes Element einer Liste eine Funktion aufrufen und dabei das Listenelement als Parameter mitgeben.

Damit könnte ich einige Zeilen Code sparen .

michael
Zuletzt geändert von michael@nav am 28. Oktober 2012 03:30, insgesamt 2-mal geändert.

Re: c/al : for each in (a, b, c) ???

26. Oktober 2012 21:41

Nein, da gibt es an Boardmitteln leider nichts adäquates.

Re: c/al : for each in (a, b, c) ???

26. Oktober 2012 21:43

Meinst du das hier? Hast du doch eigentlich schon genauso hingeschrieben.

Code:
IF TextVariable IN ['T1','T2','T3'] DO BEGIN
  Funktion(TextVariable)?
END;

Re: c/al : for each in (a, b, c) ???

26. Oktober 2012 21:54

Hm, ich dachte jetzt, es wäre so etwas wie eine Collection gemeint, die man komplett durchlaufen möchte. Aber außer sich mit Arrays oder temporären Records zu behelfen, fällt mir grad nichts ein.

Re: c/al : for each in (a, b, c) ???

27. Oktober 2012 17:55

Nicht ganz das Gleiche, aber in etwa würde das so aussehen:
Code:
FOR i := 1 TO ARRAYLEN(TextArray) DO
  MyFunction(TextArray[i]);

Falls man sich nicht sicher ist, ob alle Elemente gefüllt sind, kann man vorab die Funktion COMPRESSARRAY benutzen.

Was nicht geht, sind natürlich dynamische Elemente unterschiedlicher Variablentypen, was z.B. im .NET ja möglich wäre.

Re: c/al : for each in (a, b, c) ???

28. Oktober 2012 03:27

Vielen Dank für die Antworten, die haben mir gut geholfen.
Verwendet hab ich dann den Ansatz mir dem Array.
Jetzt kann ich mehrere Tabellen, die identische Feld-IDs haben, mit nur einer Funktion mittels Table/Field Referencen bearbeiten.
Spart ´ne Menge Zeilen und ist besser wartbar.

Vielen Dank !
Michael

Re: c/al : for each in (a, b, c) ???

29. Oktober 2012 16:17

Solange das Array im überschaubaren Rahmen bleibt ist das in Ordnung. Wenn Du riesige Arrays bastelt für Berechnungen, kann ich nur von abraten. Die Performance ist grottig. Da sind temp Records besser.