[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2007
    Beiträge
    30

    Question Anfägerfrage: Prozeduren in ILE RPG

    Hallo
    Ich programmiere momentan in C#. Jetzt bin ich auf die SystemI umgestiegen u. versuche RPG ILE zu lernen. Es ist ein harter Umstieg!

    Meine Kollegen programmieren so mit Sprungmarken u. allem möglichen was ich aus meiner Sicht gar nicht verstehe.
    Gibt es nicht soetwas wie Prozeduren oder auch Funktionen genannt wie in anderen Sprachen?
    z.B. in C#:
    Code:
    void Main
    {
     int iZahl1 = 5;
    ErhöheUmFünfUndGibAus(iZahl1);
    Console.ReadLine();
     
    void ErhöheUmFünfUndGibAus(int i)
    {
    Console.WriteLine("iZahl1 + 5 =  {0}",i+5);
    }
     
    }
    Falls es sowas gibt könnte mir jemand dieses einfach Beispiel in ILE RPG übersetzen?
    Wäre sehr dankbar, googeln hat mir nicht viel gebracht.
    Ach noch was, gibt es eine "modernere" (evtl. auch Kostenlose) Entwicklungsumgebung für ILE RPG anstelle des GreenScreens im ClientAccess?

    Gruß

  2. #2
    Registriert seit
    Apr 2004
    Beiträge
    105
    Hier ein RPG-Quelltext mit Prozedur nach deinem Beispiel:

    Code:
     *---------------------------------------------------------------* 
     *  Main                                                         * 
     *---------------------------------------------------------------* 
                  
    d iZahl1          s              9s 0 inz(5)                       
                                                                       
    d erhoehe         pr                                               
    D iZahl2                         9s 0                              
                                                                       
     /free                                                             
       Erhoehe(iZahl1);                                                
       *inlr = *on;                                                    
     /end-free                                                         
                                                                       
     *---------------------------------------------------------------* 
     *  Prozedur                                                     * 
     *---------------------------------------------------------------* 
    P Erhoehe         B                                                
    D Erhoehe         PI                                                
    D iZahl2                         9s 0                               
                                                                        
    d prompt          s             51a   inz('')                       
    d result          s              1a   inz('')                       
                                                                        
     /free                                                              
       prompt = 'iZahl1 + 5 = ' + %char(iZahl2+5);                      
       dsply prompt '' result;                                          
     /end-free                                                          
    
    P Erhoehe         E

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    zuerst mal mein Beileid,
    @GOTO: bleib dabei das nicht zu verstehen
    @Prozeduren: seitdem RPG in den 70er Jahren des vorigen Jahrhunderts angekommen ist, gibt es sowas, ein analoges Beispiel zu deinem könnte so aussehen:

    H DFTACTGRP(*NO)
    /*=== globale Deklarationen ==================================*/
    *
    D Hallo PR
    D 40A VALUE
    /*=== Main ================================================== =*/
    C callp Hallo('Hallo Main')
    C return
    /* end Main */
    /*================================================= ===========*/
    P Hallo B
    D Hallo PI
    D Text 40A VALUE
    /*------------------------------------------------------------*/
    C Text dsply

    C return

    P Hallo E

    da gibts schon ein paar Unterschiede zu anderen Sprachen:
    - das main ist namenlos und wird am Ort erkannt
    - Prototyp und Interface müssen getrennt codiert werden
    - Procedures ohne Parameter brauchen keinen Prototyp
    - man kann nicht überladen

    ein paar weniger triviale Beispeile findest du auch auf meiner Freeware Seiet.

    mfg

    Dieter Bender

    Zitat Zitat von GutmannHGW Beitrag anzeigen
    Hallo
    Ich programmiere momentan in C#. Jetzt bin ich auf die SystemI umgestiegen u. versuche RPG ILE zu lernen. Es ist ein harter Umstieg!

    Meine Kollegen programmieren so mit Sprungmarken u. allem möglichen was ich aus meiner Sicht gar nicht verstehe.
    Gibt es nicht soetwas wie Prozeduren oder auch Funktionen genannt wie in anderen Sprachen?
    z.B. in C#:
    Code:
    void Main
    {
     int iZahl1 = 5;
    ErhöheUmFünfUndGibAus(iZahl1);
    Console.ReadLine();
     
    void ErhöheUmFünfUndGibAus(int i)
    {
    Console.WriteLine("iZahl1 + 5 =  {0}",i+5);
    }
     
    }
    Falls es sowas gibt könnte mir jemand dieses einfach Beispiel in ILE RPG übersetzen?
    Wäre sehr dankbar, googeln hat mir nicht viel gebracht.
    Ach noch was, gibt es eine "modernere" (evtl. auch Kostenlose) Entwicklungsumgebung für ILE RPG anstelle des GreenScreens im ClientAccess?

    Gruß
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Aug 2007
    Beiträge
    30
    Zitat Zitat von woki Beitrag anzeigen
    Hier ein RPG-Quelltext mit Prozedur nach deinem Beispiel:

    Code:
     *---------------------------------------------------------------* 
     *  Main                                                         * 
     *---------------------------------------------------------------* 
     
    d iZahl1          s              9s 0 inz(5)                       
     
    d erhoehe         pr                                               
    D iZahl2                         9s 0                              
     
     /free                                                             
       Erhoehe(iZahl1);                                                
       *inlr = *on;                                                    
     /end-free                                                         
     
     *---------------------------------------------------------------* 
     *  Prozedur                                                     * 
     *---------------------------------------------------------------* 
    P Erhoehe         B                                                
    D Erhoehe         PI                                                
    D iZahl2                         9s 0                               
     
    d prompt          s             51a   inz('')                       
    d result          s              1a   inz('')                       
     
     /free                                                              
       prompt = 'iZahl1 + 5 = ' + %char(iZahl2+5);                      
       dsply prompt '' result;                                          
     /end-free                                                          
     
    P Erhoehe         E
    Wow.. zunächst mal Danke an euch beide!
    eigentlich ist es jetzt fast so als ob mir jemand etwas auf Chinesisch erzählt.

    Ich nehme mal dein Beispiel her Woki:
    - das "d iZahl s 9s 0 inz" initialisiert eine Zahl in der Länge 9 mit dem Wert 5?
    - was ist "d erhoehe pr" ? Ein Pointer?
    - für was ist dieser /free Teil? was bewirkt *inlnr=*on
    /free
    Erhoehe(iZahl1); *inlr = *on;
    /end-free

    Dann hier im Prozedur-Teil

    - Was macht "P Erhoehe B", "D Erhoehe PI"

    Bewirkt dsply prompt '' result; Die Anzeige in einer einfachen Ausgabezeile, d.h. man könnte dieses PGM auch ohne DSPF anwenden?

    und ganz am Ende steht noch "P Erhoehe E" - ist das dann der Dekonstruktor???

    Bin völlig baff was ihr mir gepostet habt ...
    Sry für die vielen Fragen, aber das war vor meiner Zeit

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dazu würde ich dir das ILERPG Programmierhandbuch empfehlen.

    Wenn du mit ILERPG arbeitest, musst du dich von der C++/C#-Denke komplett verabschieden.

    Es gibt keine Konstruktoren/Destruktoren und schon gar keine Klassen.

    /free u. /end-free leiten das freie Format ein und beenden das spaltenorientierte Format.

    P-Zeilen (mit B und E) umschreiben den Body der Prozedur.

    D xxx PR beschreibt den Prototyp (Aufrufkonvention) der Prozedur für den (impliziten) CALLP.

    D xxx PI beschreibt den Funktionsaufruf der Prozedur analog "int MyFunc(int parm)".
    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 2003
    Beiträge
    2.403
    Hier geht's zur ILE RPG Referenz von IBM für V5R1.

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ein paar Ergänzungen:
    - gedacht ist das ganze in Lochkarten
    in Spalte 6 steht die Kartenart
    ab Spalte 72 ist rechter Rand

    D Lochkarten sind Deklarationen, die dann Unterarten haben können, das steht aber dann weiter rechts in Spalte xy, hier gibt es PI und PR und s

    PR sind die Prototypen, PI die interfaces, da prüft der Compiler ob es mir gelingt zweimal dasselbe zu deklarieren.

    Karten ohne Kartenart oder Kartenart C sind das, was sonst ausführbare Anweisungen sind, wobei der Compiler hier darauf achtet, dass ich die Kartenart nur weglassen darf, wenn ich vor einem solchen Block /free und danach /end-free hinschreibe. (Das geht eigentlich auf eine Wette in Toronto zurück, wo man dies so entworfen hat: gewonnen hat damals der Entwickler, der gesagt hat, dass man einem RPG Programmierer alles zumuten kann, wenn es nur in der Reference steht).

    Das dsply ist ein stammelnder Name für display und entspricht einem system.out() in Java - was eine Konsolausgabe meint, wobei die Konsole hier ein Angst-Bildschirm ohne Display File ist.

    Am besten lernt man das, indem man mit Lochkarten stanzen anfängt, dann freut man sich anschließend über jede Verbesserung und nach 20 Jahren hält man das dann für die genialste Programmiersprache aller Zeiten.


    D*B


    Die P Karten entsprechen im wesentlichen der Klammer für die Implementierung einer Procedure.

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dazu würde ich dir das ILERPG Programmierhandbuch empfehlen.

    Wenn du mit ILERPG arbeitest, musst du dich von der C++/C#-Denke komplett verabschieden.

    Es gibt keine Konstruktoren/Destruktoren und schon gar keine Klassen.

    /free u. /end-free leiten das freie Format ein und beenden das spaltenorientierte Format.

    P-Zeilen (mit B und E) umschreiben den Body der Prozedur.

    D xxx PR beschreibt den Prototyp (Aufrufkonvention) der Prozedur für den (impliziten) CALLP.

    D xxx PI beschreibt den Funktionsaufruf der Prozedur analog "int MyFunc(int parm)".
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Apr 2004
    Beiträge
    105
    Zitat Zitat von GutmannHGW Beitrag anzeigen
    Ich nehme mal dein Beispiel her Woki:
    - das "d iZahl s 9s 0 inz" initialisiert eine Zahl in der Länge 9 mit dem Wert 5?
    Richtig, 9 Stellen numerisch, davon 0 Dezimalstellen, initialisiert mit dem Wert 5.
    Zitat Zitat von GutmannHGW Beitrag anzeigen
    was bewirkt *inlnr=*on
    *inlr = *on bewirkt, daß das Programm beendet wird (last record indicator)
    Zitat Zitat von GutmannHGW Beitrag anzeigen
    Bewirkt dsply prompt '' result; Die Anzeige in einer einfachen Ausgabezeile, d.h. man könnte dieses PGM auch ohne DSPF anwenden?
    Genau, das ist eine einfache Programmausgabe ohne DSPF.
    Zitat Zitat von GutmannHGW Beitrag anzeigen
    Bin völlig baff was ihr mir gepostet habt ...
    Sry für die vielen Fragen, aber das war vor meiner Zeit
    Habe RPG auch erst vor gut 6 Jahren in meiner Ausbildung kennen gelernt, ich komme eigentlich aus der Basic-Welt. War schon eine riesige Umstellung. Aber nach ein paar Monaten war ich dann doch im Thema. Ich kann nachvollziehen, wie es dir geht. Für mich waren das auch Hieroglyphen aus einer anderen Zeit.

  9. #9
    Registriert seit
    Oct 2006
    Beiträge
    44
    Ach noch was, gibt es eine "modernere" (evtl. auch Kostenlose) Entwicklungsumgebung für ILE RPG anstelle des GreenScreens im ClientAccess?
    Das wäre dann das WDSC. Das ist eine auf eclipse aufbauende IDE. Einfach mal danach googeln oder hier im Forum suchen. Find ich persönlich aber nicht unbedingt einsteigerfreundlich, aber das muss jeder selber ausprobieren.

    Viele Grüße
    Plinzen

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. DDS in ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 82
    Letzter Beitrag: 19-10-06, 15:37
  4. Return ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 31
    Letzter Beitrag: 28-09-06, 17:53
  5. Rechnen mit Datumsfeldern in ILE RPG
    By Angela in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 22-08-06, 10:11

Berechtigungen

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