View Full Version : Anfägerfrage: Prozeduren in ILE RPG
GutmannHGW
06-03-08, 08:15
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#:
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ß
Hier ein RPG-Quelltext mit Prozedur nach deinem Beispiel:
*---------------------------------------------------------------*
* 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
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
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#:
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ß
GutmannHGW
06-03-08, 10:55
Hier ein RPG-Quelltext mit Prozedur nach deinem Beispiel:
*---------------------------------------------------------------*
* 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.. :eek: 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 ...:confused:
Sry für die vielen Fragen, aber das war vor meiner Zeit ;)
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)".
Hier geht's zur ILE RPG Referenz (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/books/c092508302.htm) von IBM für V5R1.
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.
</JOKE>
D*B
Die P Karten entsprechen im wesentlichen der Klammer für die Implementierung einer Procedure.
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)".
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.
was bewirkt *inlnr=*on
*inlr = *on bewirkt, daß das Programm beendet wird (last record indicator)
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.
Bin völlig baff was ihr mir gepostet habt ...:confused:
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. :D
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