[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2001
    Beiträge
    2.713
    Zitat Zitat von woodstock99 Beitrag anzeigen
    nein das glaub ich nicht. ich glaub wir reden aneinander vorbei. das problem haben wir in der arbeit und das hat gar nix mit dateien usw zu tun.aber trotzdem danke
    Nur am Rande gefragt:

    Haben die Datenstrukturen keine Namen? Und hat das Feld "Schlüssel" wirklich einen Umlaut im Namen? ;-)

    -h

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Benenne die Datenstrukturen und gib das Schlüsselwort Qualified an. Die Datenstruktur-Unterfelder müssen dann qualifiziert angegeben werden, d.h. DS.Unterfeld.

    Bei unqualifizierten Datenstrukturen müssen die Unterfelder eindeutig sein.

    PHP-Code:
    D MyDS1      DS                   Qualified
    D  Fld1                    10A
    D  Fld2                    5P 0

    D MyDS2      DS                   Qualified
    D  Fld1                    15A
    D  Fld3                    10I 0

    D MyDS3      DS                   Qualified
    D  Fld2                    15P 5
    D  Fld3                     20A   Varying

     
    /Free 
        MyDS1
    .Fld1 'ABC';
     /
    End-Free 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Verwirrung ?

    Im RPG und auch RPGLE kann jedes verwendete Feld nur genau 1 Mal vorkommen.

    Ist das Feld also einer Struktur bereits zugeordnet, kann man es keiner 2. Struktur zuordnen.
    Dies lehnt der Compiler schon mal ab.

    Auch "Qualified" umgeht das Problem nicht sondern definiert das Feld eben ein 2. oder 3. oder n. Mal, da der Name nun immer qualifiziert angegeben werden muss und die Struktur nun auch einen Namen benötigt:

    Ds1.Feld
    Ds2.Feld
    Ds3.Feld
    :

    Die Aufgabenstellung, nur 1 Move/Eval und alle Vorkommen der Felder sind gefüllt, kann nie realisiert werden.
    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

  4. #4
    Registriert seit
    Nov 2007
    Beiträge
    371
    Vielen Dank für die Antworten.
    @ HolgerScherer. Natürlich haben die Felder Umlaute. Wenn man genau hinsieht sogar 2 . Sorry Mein Fehler !!!

    Nein Sorry war ne blöde Angabe und das ich es evtl so umständlich formuliert habe aber Herr Fuerchau hat die Problematik genau erfasst.Einmal einen Eval oder Move absetzen und das Feld in den unterschiedlichen Datenstrukturen ist gefüllt. Schade das es nicht funktioniert. Hätte mir eine Menge definitions und hin und her gemove erspart . Gruß

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Du musst allerdings zugeben, dass der Wunsch an sich ja schon unzulässig ist.

    Da jede Struktur und jedes Feld einen eigenen Speicherbereich belegt kann ich mit einem Move/Eval ja nicht gleichzeitig mehrere Felder befüllen.
    Ich kenne da auch keine Programmiersprache die das kann.

    In C/C++ gibts noch die Kurzform:

    A = B = C = D = 0;

    Allerdings ist "=" grundsätzlich eine Zuweisung, die manchmal zur Verwirrung führt:

    if (A = 0) ...

    bedeutet:

    A=0;
    If A <> 0 then;

    Also, reingefallen.

    Korrekt ist dann

    if (a == 0) ...

    == ist da nämlich der Vergleichsoperator.

    Dann doch lieber RPGLE mit klaren Definitionen.
    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

  6. #6
    Registriert seit
    Nov 2007
    Beiträge
    371
    Ja genau das hab ich auch gehofft. Jedes Feld und jede DS hat seinen eigenen Speicherbereich. Aber ich hätte es mir so vorgestellt das innerhalb des Speicherbereichs der DS die Referenz auf die Felder (das Feld Werk) gespeichert wird und somit wäre das ja eine Art call by reference .
    Praktisch es wird auf den Speicherbereich der Variablen Werk verwiesen und da das Feld ja immer gleich heisst hätte ich mir gedacht es könnte so funktionieren .
    Eigentlich klingt doch der Denkansatz gar nicht mal so verkehrt oder??

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dafür musst du dann tatsächlich Pointer verwenden um identische Adressen zu belegen:

    d MyDs1 ds
    d MyFeld 10

    d MyPtr S * inz(MyDs1)
    d MyDs2 ds based(MyPtr)
    d MyFeld2 10

    Das Risiko von falschen Definitionen auf die selben Adressen ist relativ hoch, zumal du nur eine DS auf einen Pointer basieren läßt.

    In C++ ist das auch nichts anderes.
    Auch dort kannst du innerhalb einer Klasse/Struktur nicht verschiedene Variablen auf die selbe Speicherstelle verweisen lassen.
    Dabei ist der Vergleich nur schwer durchzuführen, denn diese Aussage gilt nur für Basis-Typen (char/int/double usw.).

    In RPG/LE entspricht die Definition einer Variablen eines eigenen Basis-Typs.
    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

  8. #8
    Registriert seit
    Nov 2007
    Beiträge
    371
    genau diesen Code hab ich schon probiert. Was ich jetzt aber nich ganz versteh:
    MYDS2 und MYDS1 haben jetzt den gleichen Speicherbereich. Zeigen also beide auf dieselbe Adresse. Warum kann ich jetzt nicht den Inhalt auch so belegen.

    z.B. move 1234567890 nach MYFELD2. Jetzt müssten doch MYFELD und MYFELD2 den gleichen Inhalt haben oder?

    Also warum kann ich dann nicht gleich MYfeld in der DS MYDS2 und MYDS1 definieren. MYFELD hat doch dann dieselbe Adresse und denselben Speicherbereich. Oder bring ich jetzt alles durcheinander??

    PS: Sorry an alle Profis aber ich bin wie gesagt Anfänger.
    Last edited by woodstock99; 09-11-07 at 14:13. Grund: erweiterung

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dies liegt in der RPG-Konvention begründet, dass eben ein Name nur genau einmal definiert werden darf.

    D MyDs1 DS
    D MyField 10

    d MyDs2 DS
    d MyField 10 <== Unzulässig

    Dem Compiler ist das schnurz egal, ob eine DS based ist oder nicht, für ihn sind das erst mal 2 verschiedene Variablen, da zur Laufzeit ja der Inhalt eines Pointers verändert werden kann und dann die Adresse eben NICHT mehr die selbe ist.

    "qualified" umgeht das insofern, als dass der Name eben in Verbindung mit dem Strukturnamen eindeutig ist.

    D MyDs1 DS
    D MyField 10

    d MyDs2 DS qualified
    d MyField 10

    MyField <= Feld der MyDs1
    MyDs2.MyField <= spricht ja wohl für sich
    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
    @ Fuerchau : Vielen Dank für die ausführlichen Antworten.Jetzt bin ich auf jeden Fall etwas schlauer. Danke nochmal

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Hilfe! Rollback bei Transaktionen funktioniert nicht
    By remo2010 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 23-11-06, 13:31
  3. Visual Age RPG kann Hilfe nicht laden
    By DeadlyPunch in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 23-12-05, 09:17
  4. Brauche Hilfe bei ersten Gehversuchen in RPG
    By ASY in forum NEWSboard Programmierung
    Antworten: 27
    Letzter Beitrag: 23-08-05, 18:04
  5. Brauche Hilfe bei RPG III
    By Micha23 in forum IBM i Hauptforum
    Antworten: 30
    Letzter Beitrag: 17-12-04, 07:41

Berechtigungen

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