[NEWSboard IBMi Forum]
Seite 1 von 4 1 2 ... Letzte

Hybrid View

  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    371

    Inhalt Variable Wert zuweisen

    Hallo Miteinander,

    In meiner Variablen steht z.b. der Wert
    'Feld1'.

    Dieser Wert stellt wiederrum einen Variablennamen dar.

    Ist es in RPG möglich den Wert einer Variablen auszulesen ( in diesem Beipiel wäre das Feld1) und diesem Inhalt Feld1 was eine Variable darstellt einen Wert zuzuweisen??



    das Thema wurde schon mal vor einiger Zeit hier diskutiert. Evtl hat sich seit der Zeit ja was getan...


    Vielen dank im voraus..

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Geändert hat sich zur Zeit nichts.
    Namen dienen nur dem Compiler und werden in Adressen übersetzt.
    Kennst du die Adresse (%ADDR() zur Compilezeit), kannst du "dynamisch" mit Inhalten arbeiten.
    Ansonten ist der "Name" zur Laufzeit unbekannt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2007
    Beiträge
    371
    Ergo. Ich habe keine möglichkeit dem Feld1 einen Wert zuzuweisen oder??

    Geht das evtl über API QUSLFLD (buffer position)


    Offset Type Field
    Dec Hex

    0 0 CHAR(10) Field name
    10 A CHAR(1) Data type
    11 B CHAR(1) Use
    12 C BINARY(4) Output buffer position
    16 10 BINARY(4) Input buffer position




    Die Variablennamen meines Displayfiles werden erst zur Laufzeit über ein Api ermittelt.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    wenn du im Programm an den Buffer drankommst (sprich ihn addressieren kannst, dann reichen die Positionen, du holst dir einen Pointer auf die Buffer Variable, addierst den Offset drauf et voila.

    D*B

    der nicht ganz versteht wozu das eigentlich gut ist und meint, dass oft über Anwednungsdesign mehr zu holen ist...



    Zitat Zitat von woodstock99 Beitrag anzeigen
    Ergo. Ich habe keine möglichkeit dem Feld1 einen Wert zuzuweisen oder??

    Geht das evtl über API QUSLFLD (buffer position)


    Offset Type Field
    Dec Hex

    0 0 CHAR(10) Field name
    10 A CHAR(1) Data type
    11 B CHAR(1) Use
    12 C BINARY(4) Output buffer position
    16 10 BINARY(4) Input buffer position




    Die Variablennamen meines Displayfiles werden erst zur Laufzeit über ein Api ermittelt.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Nov 2007
    Beiträge
    371
    @ Bender.

    wir setzten unsere Displayattribute über einen Variablennamen. Diese Variablennamen holen wir uns über ein APi. Diese müssen alle erst einmal initialisiert werden x:20 weil es sonst zu Fehlern bei der Setzung der Attribute kommt.


    Wie soll man das sonst anstellen?
    Wir wollen halt nicht jede Variable im RPG
    per Hand initialisieren ...

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    solange man ein File pro Displayfile hat, würde ich das von anderer Logik befreien (=> Design) und die Dinger aus den DDS Bestimmungen generieren - und fertig ist.
    @Baldur: Substring von DS (intern binary data) und Pointer ist dasselbe. Die packed und int Klamotten kriegt man auch über Zwischenfelder da rein (am besten macht man sich da ein Service Programm mit entsprechenden Konvertierungen)

    D*B

    Zitat Zitat von woodstock99 Beitrag anzeigen
    wir setzten unsere Displayattribute über einen Variablennamen. Diese müssen alle erst einmal initialisiert werden x:20 weil es sonst zu Fehlern bei der Setzung der Attribute kommt.

    Wie soll man das sonst anstellen?
    Wir wollen halt nicht jede Variable im RPG
    per Hand initialisieren ...
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Nov 2007
    Beiträge
    371
    wir haben halt mehrere Records,Windows usw in unserer Bildschirmmaske. Wir positionieren und z.b auch bei einer Fehlermeldung über ein Api auf das fehlerhafte Feld. Ziel dieser ganzen Aktion soll sein : Keine Bezugszahlen mehr und flexibilität z.b. ein Feld das Blau ist soll bei einem Fehler in Umkehranzeige dargestellt werden usw und das ganze ohne Bezugszahlen, denn 1347 Bezugzahlen im Programm macht das ganze nicht grad übersichtlicher .

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @Bahnhof: dann gehen wir doch nochmal zurück nach draußen.
    das alles ist doch zur Compilezeit bekannt und ändert sich erst, wenn das DSPF geändert wird?!
    Dann würde ich den erforderlichen Code generieren!!!

    D*B

    Zitat Zitat von woodstock99 Beitrag anzeigen
    wir haben halt mehrere Records,Windows usw in unserer Bildschirmmaske. Wir positionieren und z.b auch bei einer Fehlermeldung über ein Api auf das fehlerhafte Feld. Ziel dieser ganzen Aktion soll sein : Keine Bezugszahlen mehr und flexibilität z.b. ein Feld das Blau ist soll bei einem Fehler in Umkehranzeige dargestellt werden usw und das ganze ohne Bezugszahlen, denn 1347 Bezugzahlen im Programm macht das ganze nicht grad übersichtlicher .
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Was soll denn dein API leisten ?

    Ein Programm, dass eine DSPF verarbeitet, muss doch genau auf diese abgestimmt sein.
    Ich verstehe also dein Problem hier überhaupt nicht.

    Ach ja, es gibt bei RPG ja noch ein Problem:
    Jedes Feld ist mit seinem Namen nur einmal im Programm bekannt!
    D.h., dass der Compiler die Adresse berechnet.
    Es ist nicht garantiert, dass die Felder in der Reihenfolge ihrer Definition des Puffers auch im Speicher stehen.
    Beispiel:
    In 2 Formaten verwendest du den Feldnamen "DSNAME".
    Das Feld ist nur 1 Mal im Programm vorhanden, irgendwo im Speicher.

    RPG generiert zusätzlichen Code:
    Bei der Ausgabe eines Formates werden die Felder in den internen Puffer des Filehandles übertragen und dann der tatsächliche Write ausgeführt.
    Bei der Eingabe wird aus dem internen Puffer in die einzelnen Variablen übertragen.

    Ein zentrales Programm, dass also auf irgendwelche Puffer zugreifen will, funktioniert bei RPG so gar nicht.

    Hier hilft also nur, je Format eine DS zu definieren.
    Der Compiler lehnt es aber ab, dass ein Feld in verschieden DS'n vorkommt, es sei denn du verwendest "qualified" in ILERPG.
    Dies setzt jedoch eine entsprechende Definition in den F-Bestimmungen voraus.
    Ausserdem ändert sich jeder Zugriff auf eine Variable, ob das denn nun der Übersichtlichkeit dient und die Programmierung vereinfacht ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Nov 2007
    Beiträge
    371
    Mein api soll leisten:

    egal welches Bildschirmfile ich definiere und wieviele DSPATR(&VARFELDER) ich in meiner Maske habe soll mein Api + Serviceprogramm alle diese Felder initialisieren.

    Sprich mein Rpg-Programm wird aufgerufen, dann lese ich über ein eine Funktion alle &varfelder meiner Bildschirmmaske aus, ermittel die Speicheradresse und initialisiere diese Felder mit dem Wert x:20.

    Wenn das Funktioniert kann ich diese INIT-&DSPATRFELDER in jeden Programm einbinden ohne das ich im Rpg auch nur eine Zeile mit definition und init schreibe.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nunja, wie gesagt gibt es 2 Möglichkeiten:

    a)
    call 'MyInz'
    parm MyAttr1
    call 'MyInz'
    parm MyAttr2
    :
    :
    b)
    MyAttr1 = x'20';
    MyAttr2 = x'20';
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nun ja, wenn du MI beherrschst, kannst du mittels DTAPTR (steht nur in MI zur Verfügung) eine Adresse mit Feldtyp und Ausprägung definieren und per MI-Befehl mittels CPYBLA o.ä. verarbeiten.

    Ich denke aber, dass das nicht die Lösung sein kann.

    Wenn du mit reinen Zeichenfeldern arbeitest kannst du ja per "%subst(MyFeld: pos: len)" variabel zugreifen.
    Mit gezonten numerischen Felder klappt das auch noch, bei gepackten Felder stößt du auf ein Problem.
    Binärfelder lassen sich noch per Zwischenfeld verarbeiten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Wert aus CSV Datei
    By mk in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 21-12-06, 08:56
  2. Variable Zahlenkonvertieren
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 28-08-06, 12:21
  3. String mit HexInhalt muss als Hex-Wert in Variable
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-05-06, 07:45
  4. Variable zuweisung
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-05-06, 11:01
  5. Können CLLE Module selbst einen Wert halten bzw. zurückgeben?
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-04-06, 10:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •