PDA

View Full Version : KLIST "füllen"



Seiten : [1] 2

LoCal
07-10-02, 14:14
Hi,

ich bin ziemlich neu in RPG (komme von Java und C und habe darum einige probs). Jedenfalls soll ich nu ein programm schreiben. Das daten durch ne logische liest und verarbeitet. weil nur ein "paar" daten gebraucht werden soll ich ne Klist machen. so weit so gut nur ist das ganze urst langsam. mein ausbilder meinte dann "du must erst die klist einlesen" doch alles was ich mit klist kenne is "reade".
Hier ist ein teil meines programmcodes (bitte nicht schimpfen... ich progge erst seit ein paar tagen in RPG)



FfoobarlgI E K DISK UC
FAYBABTUSO E DISK
C OPEN foobarlg
C *ENTRY PLIST
C PARM VDAT 60
C PARM BDAT 60
C AYB KLIST
C KFLD FIELD1
C KFLD FIELD2
C KFLD FIELD3
C KFLD FIELD4
C KFLD FIELD5
C AYB READEfoobarlg 50
C AYB CHAINfoobarlg 41
C 100 SETLLfoobarlg
C AYB SETLLfoobarlg
C *IN26 DOUEQ*ON
C READ foobarlg 26
C *IN26 IFEQ *ON
C LEAVE
C ENDIF
C AAC015 IFGE VDAT
C DO
C AAC015 DOUGTBDAT
C EXSR FOO
C WRITEAYBABTR
C ENDDO
C ENDDO
C ENDIF
C ENDDO
C MOVE *ON *INLR
C CLOSE*ALL
CSR FOO BEGSR
C* hier werden nur ge-movel-t
C ENDSR


Schonmal im vorraus vielen Dank.

Peace,

LoCal

mk
07-10-02, 14:45
Hallo Local,

du musst in deinem Programm erst die Felder der Klist mit werten füllen.
(also Feld1-feld5) erst füllen
dann zb READE oder Chain.
RPG liest dann nur Datensätze mit den Werten
in den Keyfeldern.

gruss Michael

LoCal
07-10-02, 15:27
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von mk:
Hallo Local,

du musst in deinem Programm erst die Felder der Klist mit werten füllen.
(also Feld1-feld5) erst füllen
dann zb READE oder Chain.
RPG liest dann nur Datensätze mit den Werten
in den Keyfeldern.
gruss Michael[/quote]

muß ich dann einmal reade machen oder immer reade also wie beim normalen read?
und muß ich in klist alle felder angeben die auch in der logischen stehen oder kann ich auch nur einen teil nehmen... field4 & 5 bräuchte ich für meine abfrage nämlcih garnicht. mein ausbilder meinte, daß ich die mit nullen oder blanks füllen soll...

Peace,

LoCal

Gerlitz
07-10-02, 20:25
Wenn du Feld4 und Feld5 nicht brauchst, dann weglassen in der KLIST. Ansonsten Felder Filed zu nennen ist wirklich nicht gerade aussagekräftig.
Ferner nehme ich mal an, daß die Datei nach Datum sortiert ist, dann mußt Du noch BDAT abfragen.
Also etwa so:

FfoobarlgI E K DISK UC
FAYBABTUSO E DISK
C OPEN foobarlg
C *ENTRY PLIST
C PARM VDAT 60
C PARM BDAT 60
C AYB KLIST
C KFLD FIELD1
C KFLD FIELD2
C KFLD FIELD3
C Move StartWert1 Field1 * z.B. VDAT
C Move StartWert2 Field2
C Move StartWert3 Field3
C AYB Setll foobarlg
C AYB READEfoobarlg 50
C N50 *IN26 DOUEQ*ON
C READ foobarlg 26
C *IN26 IFEQ *ON
C AAC015 ORGT BDAT
C LEAVE
C ENDIF
C AAC015 IFGE VDAT
C DO
C AAC015 DOUGTBDAT
C EXSR FOO
C WRITEAYBABTR
C ENDDO
C ENDDO
C ENDIF
C ENDDO
C MOVE *ON *INLR
C CLOSE*ALL
CSR FOO
BEGSR
C* hier werden nur ge-movel-t
C ENDSR

Gruß

Matthias



[Dieser Beitrag wurde von Gerlitz am 07. Oktober 2002 editiert.]

LoCal
08-10-02, 08:00
Da wirft sich gleich noch ne frage für mich auf: Reade kann also nicht als "ersatz" für read genommen werden, oder?
FIELD habe ich nur für dieses Forum genommen...fand ich auf den ersten blick übersichtlicher als die eigentlichen namen

Danke,

LoCal

LoCal
08-10-02, 09:15
Noch ne Frage: Woran kann das eigentlich liegen, daß das ganze urst lahm is?? Wenn ich das ganze mit sequel mache is das fast sofort da und wenn ich es so wie oben mache dauert das mal 30 Sekunden bis ne minute...

Peace,

LoCal

B.Hauser
08-10-02, 09:25
Hallo LoCal,

Beim READ werden ALLE Daten-Sätze der Reihe nach (also entsprechend der Schlüsselung) abgearbeitet.

Es ist nicht möglich bei READ eine Schlüssel zu verwenden.

Nicht benötigte Sätze können nur überlesen werden (z.B. durch eine ITER-Anweisung)

Werden aus einer Datei mit mehreren 100.000 Sätzen nur eine handvoll benötigt, ist es wenig sinnvoll (Laufzeit-Probleme) die komplette Datei abzuarbeiten.

Bei geschlüsselten Dateien ist es möglich, über einen einzelnen Schlüssel oder, wenn sich der benötigte Schlüssel aus mehreren Felder zusammensetzt über eine Schlüssel-Liste eine Auswahl von Sätze zu bearbeiten.

Dazu muss zunächst über einen SETLL-Befehl der Pointer an den Anfang der Auswahl gestellt werden.
Der Pointer wird auf den 1. Satz der Auswahl oder, wenn keine genaue Übereinstimmung gefunden wurde vor den Satz mit dem nächt höheren Schlüssel positioniert.
Über die GLEICH-Bezugszahl (sollte in RPGIV vermieden werden) oder die Built-in-Function %Equal, kann geprüft werden ob ein Satz mit der genauen Übereinstimmung gefunden wurde.
Die Built-In-Function %Found wird auf *On gesetzt, wenn ein Satz mit dem gleichen oder einem höheren Schlüssel vorhanden ist.

Über READE werden nur die der Auswahl entsprechenden Sätze eingelesen.
Die GLEICH-Bezugzahl (sollte in RPGIV vermieden werden) oder die Built-in-Function %EOF werden auf *ON gesetzt, wenn der letzte der Auswahl entsprechende Satz verarbeitet wurde.

Wird CHAIN verwenden, wird der erste Satz mit der genauen Übereinstimmung eingelesen.
(Also SETLL und READE in einem)
Mit der HOCH-Bezugszahl (sollte in RPGIV vermieden werden) oder der Built-in-Function %Found, kann geprüft werden, ob ein Satz eingelesen wurde.
Achtung: Dich HOCH-Bezugszahl geht an, wenn KEIN SATZ gefunden wurde.
%Found wird auf *ON gesetzt, wenn ein Satz eingelesen wurde.

Ansonsten würde ich Dir mal die RPG-Referenz ans Herz legen. http://as400bks.rochester.ibm.com/pubs/html/as400/onlinelib.htm

Ich habe mir gerade Deine Quelle nochmal angeschaut. Du programmierst ja noch in RPGIII (auch RPG/400 genannt). Wenn es möglich ist, versuche Dir RPGIV (auch ILERPG genannt) anzueignen, da RGPIII nicht mehr weiter entwickelt wird.
In RPGIV hast Du viel mehr Möglichkeiten und es fällt jemand, der von C++ oder JAVA kommt viel leichter.

Und noch etwas, versuche nicht soviel IFs und DOs ineinander zuschachteln, lieber eine Subroutine mehr.

Ich hoffe ich konnte Dir ein bisschend weiterhelfen.

Birgitta

LoCal
08-10-02, 09:37
Hallo,

erstma vielen Dank für die ausfürliche antwort.

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von B.Hauser:
Hallo LoCal,

Beim READ werden ALLE Daten-Sätze der Reihe nach (also entsprechend der Schlüsselung) abgearbeitet.

Es ist nicht möglich bei READ eine Schlüssel zu verwenden.
[/quote]

Also könnte ich statt mit READ auch immer mit READE "weiterlesen"??


<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Nicht benötigte Sätze können nur überlesen werden (z.B. durch eine ITER-Anweisung)

Werden aus einer Datei mit mehreren 100.000 Sätzen nur eine handvoll benötigt, ist es wenig sinnvoll (Laufzeit-Probleme) die komplette Datei abzuarbeiten.
[/quote]

Yo http://www.as400-forum.de/ubb/smile.gif Das "wußte" ich schon, nur das "workaround" kenne ich nicht.

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Bei geschlüsselten Dateien ist es möglich, über einen einzelnen Schlüssel oder, wenn sich der benötigte Schlüssel aus mehreren Felder zusammensetzt über eine Schlüssel-Liste eine Auswahl von Sätze zu bearbeiten.

Dazu muss zunächst über einen SETLL-Befehl der Pointer an den Anfang der Auswahl gestellt werden.
Der Pointer wird auf den 1. Satz der Auswahl oder, wenn keine genaue Übereinstimmung gefunden wurde vor den Satz mit dem nächt höheren Schlüssel positioniert.
[/quote]

Das habe ich doch mit


AYB SETLL FOOBARLG 50


oder?

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>

Ansonsten würde ich Dir mal die RPG-Referenz ans Herz legen. http://as400bks.rochester.ibm.com/pubs/html/as400/onlinelib.htm
[/quote]

schon geschehen http://www.as400-forum.de/ubb/smile.gif

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Ich habe mir gerade Deine Quelle nochmal angeschaut. Du programmierst ja noch in RPGIII (auch RPG/400 genannt). Wenn es möglich ist, versuche Dir RPGIV (auch ILERPG genannt) anzueignen, da RGPIII nicht mehr weiter entwickelt wird.
In RPGIV hast Du viel mehr Möglichkeiten und es fällt jemand, der von C++ oder JAVA kommt viel leichter.
[/quote]

Würde ich gerne, läuft hier aber leider noch nicht..... und die progger hier können kein RPGIV http://www.as400-forum.de/ubb/frown.gif
Am liebsten wäre mir Java

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Und noch etwas, versuche nicht soviel IFs und DOs ineinander zuschachteln, lieber eine Subroutine mehr.
[/quote]

Schon passiert.... das habe ich heute morgen als erstes gemacht, weil ich beim durchlesen immer gestolpert bin.

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Ich hoffe ich konnte Dir ein bisschend weiterhelfen.

Birgitta[/quote]

Klar http://www.as400-forum.de/ubb/smile.gif

Danke nochmal.

Peace,

LoCal

LoCal
08-10-02, 09:59
Das Datum steht übrigens nicht in Field1 sondern in Field3, macht das "ordnen" aufwendiger...
das prob ist, daß das alles ewig lang läuft eine minute und länger... habe die zeit gestoppt.

Steven
08-10-02, 10:19
Also könnte ich statt mit READ auch immer mit READE "weiterlesen"??


Ich programmiere auch noch nicht lange mit RPGLE. Aber ich glaub das hab ich verstanden.
Mit READ kannst du eine ganze Datei durchlesen. Du kannst also z. B. alle Datensätze mit einer bestimmten nummer anzeigen lassen oder so:

READ MYFILE
IF NUMMER = '45'
MOVE NUMMER NR$DSPF
MOVE NAME NR$DSPF
usw.
ENDIF

Mit READE kannst du über einen Schlüssel einen bestimmten oder mehrere bestimme Datensätze suchen.

Wenn du also über IF-Kriterien suchen willst benutzt du READ (alle datensätze werden eingelesen), wenn du über einen Schlüssel suchst benutzt du READE (nur Datensätze mit übereinstimmung mit dem Schlüssel werden eingelesen.)

Ich hoffe ich hab hier nicht zu viel Müll erzählt http://www.as400-forum.de/ubb/smile.gif