PDA

View Full Version : Rückgabe eines Arrays aus einer Funktion



harkne
04-01-06, 13:43
Hallo zusammen,

ich habe folgendes Problem.
Ich habe eine selbt geschriebene Funktion die als Rückgabewert ein Array hat



dGetLngTxt pr 256 dim(10)
d 6 const
d 9 const
d 2 const options(*nopass)


Habe ich in meinem Programm in welchem ich die Funktion benutzen möchte die Möglichkeit auf das 2. Element zuzugreifen ????

Also z.B. Text = getLngTxt('XXX':'XXXX')(2)

So gehts natürlich nicht. Das habe ich mir zwar erhofft aber ging leider nicht.

Habt ihr eine Idee ? Sonst müsste ich in allen Programmen ein Hilfsarray verwenden und dort erst rein stellen.

B.Hauser
04-01-06, 14:24
Habt ihr eine Idee ? Sonst müsste ich in allen Programmen ein Hilfsarray verwenden und dort erst rein stellen.

Da wird wohl nichts anderes übrig bleiben. Es gibt keine Möglichkeit direkt auf eine Element in einem Rückgabe-Wert zuzugreifen.

Eine andere Möglichkeit wäre, Du schreibst eine weitere Funktion, mit einem zusätzlichen Parameter, in dem Du das gewünschte Element angibst. Diese Funktion ruft dann die erste auf und gibt nur das entsprechende Element zurück.
Da man in RPG leider nicht überladen kann, muss die neue Funktion natürlich auch anders heißen als die bereits bestehende.

Birgitta

Fuerchau
04-01-06, 15:08
Ein Hilfsarray spart sogar ggf. Aufrufe, wenn man auf mehr als 1 Element zugreifen will. Was anderes wäre mit dieser Funktion sowieso schlecht. Warum sollte ein Array zurückgegeben werden, wenn immer nur 1 Element benötigt wird ?

harkne
04-01-06, 15:33
Ihr habt alle recht und ich danke Euch allen.
Ich hätte natürlich nicht ein Array zurückgegeben wenn es nicht an manchen Stellen von nöten wäre. Damit spare ich mir die Funktion 10mal aufzurufen. Im Moment da >ICH< sie zum ersten mal selbst verwende bin ich schlauer und hätte einfach einen String zurückgegeben den ich mit substring hätte auflösen können, nur hat mein Kollege inzwischen die Funktion bereits in ca 40 Programme eingebaut und das wollte ich ihm dann doch nicht antun :rolleyes: .
Ansonsten hab ich mir jetzt halt auch eine Funktion gemacht die diese Funktion aufruft und nur das erste Element zurück gibt.

Also nochmals danke an alle.

Aber irgendwie finde ich hat da IBM ein bischen gepatzt. Eine Funktion ist sozusagen ein Array aber ich kann nicht auf dessen Elemente zugreifen.

Fuerchau
04-01-06, 16:44
Diese Aussage ist da etwas falsch. Die Funktion ist eine Funktion und kein Array, deshalb erlaubt die RPG-Syntax da keine Erweiterung.

Andere Programmiersprachen (VB/C++/Java) können den Rückkehrwert einer Funktion als temporäre Variableoder oder Adresse übernehmen und daher auf diese mittels Array-Index auch zugreifen.
Du kannst dir dies auch als allgemeine BuiltIn-Funktion denken, die als Argument ein Array bekommt und als Ergebnis ein Element liefert.
Das funktioniert aber nur durch o.g. überladene Funktionen, die RPGLE nun mal (leider oder Gott-sei-Dank) nicht kennt. (Gerade Überladungen dienen häufig der Verwirrung des Programm-Lesers, machmal auch des programmierers.)

Du könntest dir also auch eine eigene Funktion schreiben, die speziell für dieses Array das Problem löst.