Anmelden

View Full Version : DOW NOT %EOF



Seiten : [1] 2

Marimari1009
23-02-05, 11:52
Hallo *ALL,

früher war's so elegant:

Key chain datei IN (partial key)
dow not IN
verarb ......
Key reade datei IN
enddo

Kann ich hier auch mit "dow not %eof" arbeiten oder
muß nach dem chain zunächt auf %found abgefragt werden???

Danke im Voraus

K. Hardy

malzusrex
23-02-05, 12:07
Hallo Hardy,

vielleicht hilft Dir ja das weiter


c Key SetLL MyFile
c Key ReadE MyFile
c DoW not %EoF( MyFile )
c
.... Verarbeitung
c
c Key ReadE MyFile
c EndDo


Tschau Ronald

B.Hauser
23-02-05, 12:29
Hallo *ALL,

früher war's so elegant:

Key chain datei IN (partial key)
dow not IN
verarb ......
Key reade datei IN
enddo

Kann ich hier auch mit "dow not %eof" arbeiten oder
muß nach dem chain zunächt auf %found abgefragt werden???

Danke im Voraus

K. Hardy

Hi,

%EOF(FileName) wird seit Release V5R1M0 beim CHAIN auf *OFF gesetzt, wenn ein Satz gefunden wurde. Ansonsten bleibt %EOF(FileName) unverändert!

Wichtig ist der Datei-Name muss unbedingt beim %EOF angegeben werden. Sonst klappt es nicht!

Wie beim CHAIN wird der %EOF(DateiName) auch bei OPEN, SETLL und SETGT gesetzt.

Birgitta

Fuerchau
23-02-05, 12:50
Grundsätzlich programmiere ich die Schleifen anders:

/free
setll (key) myfile;
dow 1=1;
reade (key) myfile;
if %eof(myfile);
leave;
endif;
// Prüfungen und ggf. Verarbeitungen
// z.B.:
if myfeld = nichtrelevant;
iter;
endif;

enddo;
/end-free

Der Vorteil, den Read an den Anfang der Schelife zu legen ist, dass ich mit "iter" ohne Label an den Anfang zum nächsten Lesen springen kann. und nicht per IF-Konstrukte irgendwie schachteln muss.
Ich definiere den Reade auch nur 1 Mal.

Der "dow 1=1;" erzeugt eine Dauerschleife, so wie früher der "do *hival".

BenderD
23-02-05, 13:06
@Baldur: den Schönheitspreis würdest du dafür von mir nicht bekommen; ich stehe da eher auf:

dow lieswas();
machwas();
enddo;

wobei lieswas liest und machwas macht!

mfg

Dieter Bender


Grundsätzlich programmiere ich die Schleifen anders:

/free
setll (key) myfile;
dow 1=1;
reade (key) myfile;
if %eof(myfile);
leave;
endif;
// Prüfungen und ggf. Verarbeitungen
// z.B.:
if myfeld = nichtrelevant;
iter;
endif;

enddo;
/end-free

Der Vorteil, den Read an den Anfang der Schelife zu legen ist, dass ich mit "iter" ohne Label an den Anfang zum nächsten Lesen springen kann. und nicht per IF-Konstrukte irgendwie schachteln muss.
Ich definiere den Reade auch nur 1 Mal.

Der "dow 1=1;" erzeugt eine Dauerschleife, so wie früher der "do *hival".

Fuerchau
23-02-05, 13:22
Naja, Dieter, würde ich ja auch gerne machen.
Dies Bedeutet aber, dass ich das Lesen in ene Prozedur verlegen muss, ansonsten bietet RPG das leider nicht. Wie schön wäre ein Konstrukt á la C++/Java o.ä.:

dow %eof(reade (Key) myfile)=*OFF;
// mach was
enddo;

Also behelfe ich mir so. Ausserdem habe ich das schon in RPG klassisch gemacht:
key setll myfile
do *hival
key reade myfile 99
*99 ifeq *on
leave
endif

:
:
enddo

Zugegeben nicht schön, aber GOTO-Frei.

BenderD
23-02-05, 13:28
wenn du die Prozeduren von der Gage abgezogen kriegst, dann sind deine Verträge verkehrt. Und was haben wir früher nicht alles gemacht:
'A' DOWEQ 'A' war auf der /36 ein Geheimtip. das war schneller als
DO *HIVAL

Dieter


Naja, Dieter, würde ich ja auch gerne machen.
Dies Bedeutet aber, dass ich das Lesen in ene Prozedur verlegen muss, ansonsten bietet RPG das leider nicht. Wie schön wäre ein Konstrukt á la C++/Java o.ä.:

dow %eof(reade (Key) myfile)=*OFF;
// mach was
enddo;

Also behelfe ich mir so. Ausserdem habe ich das schon in RPG klassisch gemacht:
key setll myfile
do *hival
key reade myfile 99
*99 ifeq *on
leave
endif

:
:
enddo

Zugegeben nicht schön, aber GOTO-Frei.

Fuerchau
23-02-05, 13:30
Oh danke, Dieter, den Tipp werde ich mir merken. Mal sehen, wieviele Microsekunden ich dadurch spare, insbesonders wenn innerhalb der Schleifen E/A-Operationen durchgeführt werden ;)

malzusrex
23-02-05, 13:39
ich denke mal hier sind wir wieder an einem punkt, wo wohl jeder von uns seine eigene vorliebe zur gestaltung von schleifen hat.
ich hatte mal nen arbeitgeber, da war nix mit LEAVE, ITER, GOTO, COMP, CABxx (hallo marcus :D ) . sowas wurde schon vom precompiler abgefangen so das man(n) es garnicht erst wandeln konnte.

gruß ronald

BenderD
23-02-05, 14:01
der Pre Compiler könnt' von mir gewesen sein


ich denke mal hier sind wir wieder an einem punkt, wo wohl jeder von uns seine eigene vorliebe zur gestaltung von schleifen hat.
ich hatte mal nen arbeitgeber, da war nix mit LEAVE, ITER, GOTO, COMP, CABxx (hallo marcus :D ) . sowas wurde schon vom precompiler abgefangen so das man(n) es garnicht erst wandeln konnte.

gruß ronald