Anmelden

View Full Version : und wieder mal variable Feldnamen



Seiten : 1 [2] 3

Fuerchau
10-03-08, 15:02
PHP ist auch eine interpretative Sprache im Gegensatz zu RPG.
RPG wird kompiliert, PHP eben nicht.
Zur Laufzeit sind keine Variablennamen mehr bekannt sondern ausschließlich Adressen.
Variablennamen dienen nur uns Programmierern zum besseren Verständnis und einfacheren programmieren.

Du kannst natürlich auch eine Struktur (DS 10000 oder mehr) anlegen und alle Inhalte per Adresse %subst(MyDS:MyPos:MyLen) ansprechen.
Dann brauchst du dem Anwender nur noch die Adressen mitteilen und dann bist du entsprechend variabel.
Namen brauchst du dann nicht mehr.

Überlege noch mal dein Design oder verwende eine andere Programmiersprache.
Wie wärs mit REXX ?
Da kannst du schön mit variablen Namen und der Interpret-Anweisung arbeiten.

PS:
Das ist natürlich nicht ganz ernst gemeint.

VAHLE
10-03-08, 15:04
@Bender:

Entschuldigung, aber ich bin mir keiner Schuld bewusst, dass ich mich hier irgendwie im Ton vergriffen haben könnte...

Ich hab mir heute den ganzen Morgen lang den Kopf über dieses Problem zerbrochen und bin bereits an allen hier genannten Lösungsansätzen gescheitert.

Warum Du Dich jetzt persönlich angegriffen fühlst, kann ich irgendwie nicht ganz nachvollziehen.

BenderD
10-03-08, 15:15
ad 1: den Zeitpunkt entscheidet allerdings der Programmierer, der Compile kann auch zur Laufzeit erfolgen und in manchen Fällen kann auch generieren, compilieren, aufrufen Sinn machen und wenn man das cached, funzt das auch.

ad 2: stimmt nicht für exportierte Variablen, deren Adressen lassen sich per API zur Laufzeit ermitteln, wenn man den Export Namen der Variablen kennt.

@VAHLE: ich habe nur zum Ausdruck gebracht, dass man eben nicht von der konkreten Aufgabenstellung absehen kann und nur präzise Fragen präzise Antworten erwarten lassen können.



RPG wird kompiliert, PHP eben nicht.

Zur Laufzeit sind keine Variablennamen mehr bekannt sondern ausschließlich Adressen.

VAHLE
10-03-08, 15:35
präzise Frage:

Ist es möglich, und wenn ja, wie, im RPG den Inhalt eines Feldes zu ermitteln, dessen Name erst zur Laufzeit bekannt ist (der Name des Feldes wird aus einer externen Datei ermittelt).

BenderD
10-03-08, 15:50
wenn man die dafür in Frage kommenden Felder zur Compiletime kennt, könnte man sie mit Schlüsselwort EXPORT kennzeichnen und dann per API Stafette (siehe dazu auch http://bender-dv.de/Sourcen/QRPGLESRC.PROCP4NAME und API Reference) die Adresse ermitteln. Letztlich landet man aber meist bei einer Struktur, die sich auch (und besser) mit einer if elseif Struktur und einer Zuweisung der Variablen an ein festes Feld, das man dann in der SQL Anweisung benutzt, abbilden lässt.
Das ganze riecht aber förmlich nach überraffiniertem "Design", für RPG ist es meist angemessener ein Leistungsfähiges View Layer anzulegen und für die dann flachen Zugriffe Zugriffsmodule zu generieren und mit denen die Daten zu holen.



präzise Frage:

Ist es möglich, und wenn ja, wie, im RPG den Inhalt eines Feldes zu ermitteln, dessen Name erst zur Laufzeit bekannt ist (der Name des Feldes wird aus einer externen Datei ermittelt).

Fuerchau
10-03-08, 16:37
Aber ob ich nun alle möglichen Variablen exportiere (was genauso zur Compilezeit bekannt sein muss) oder über einen Verteiler die Namen abfrage und ersetze, der Aufwand ist letztlich der selbe und im weitesten Sinne nicht dynamisch.

Ausserdem kann ich zwar zur Laufzeit die Adresse der exportierten Variablen ermitteln, ich habe allerdings keine dynamische Funktion, den Typ variabel abzufragen und entsprechend auszuwerten.
Adresse bleibt Adresse.

Desweiteren musst du ja auch noch die SQL-Syntax berücksichtigen, Strings in Hochkomma, Zahlen ohne, Dezimalpunkt/Komma.

Also:
Überlege noch mal dein Design bzw. die Anforderung.

VAHLE
10-03-08, 17:27
Danke für die Antworten.

Werde mir morgen dann mal Gedanken darüber machen, wie ich das ganze angehen werde.
Hinsichtlich "dynamischem Design" werde ich wohl einige Abstriche machen müssen, wie es ausschaut.

Trotzdem vielen Dank !

Gruß,
Olli

VAHLE
10-03-08, 17:44
Irgendwie kommt mir gerade noch so ein Gedanke in den Sinn...

Kann ich im RPG einen Speicherauszug erstellen ?
(wie der formatierte Speicherauszug, den ich mir bei einem Programmabbruch erstellen kann ?)
Den könnte ich dann ja (wenn er nur als Spool zu erstellen ist) in eine DB-Datei in der QTEMP schaufeln, nach dem Feldnamen durchsuchen und käme so an den Feldinhalt...

Nur so ein Gedanke... ist ziemlich quer gedacht, weiss ich, aber vielleicht geht das ja...

Fuerchau
10-03-08, 17:53
Dafür gibt es die DUMP-Anweisung.
Allerdings musst du das Programm mit Debug umwandeln, da sonst die Programmvariablen nicht gedumpt werden.

Das nächste Problem ist dann allerdings, dass du eine Adresse im Programm aber nicht dynamisch zuweisen kannst.
Hierzu benötigst du eine Referenzadresse.

D MyPtr *
D MyDS DS
D MyVar 10

MyPtr = %addr(MyVar);

Der Dump liefert i.Ü. keine Adressen sondern nur den Namen (falls Debug) und den Inhalt.

VAHLE
10-03-08, 17:57
das hört sich doch mal gar nicht so schlecht an...
Nach dem Namen der Variable könnte ich ja suchen (der würde ja in meiner Programmvariable "FeldName" stehen und dann hätte ich den zugehörigen Wert...)

Werde da smorgen mal versuchen und dann Bericht erstatten. Habe leider im Moment keinen Zugriff auf die Maschine...