RPGLE // dow not %eof // dou %eof

0

Jaka jest różnica pomiędzy:

read ...
dow not %eof;
do stuff
read ...
enddo;

read ...
dou %eof;
do stuff
read ...
enddo;

Nie rozumiem dlaczego ma być dow not %eof; nie mogę zrozumieć tego not skoro *dou %eof * znaczy robić coś do momentu końca pliku, tak?

1

Wygląda na 2 różne pętle:

  • Dow - do while
  • Dou - do until
0

Dokładnie tak, nie rozumiem jak one działają z:

  • %eof
  • not %eof
1
greg13 napisał(a):

Dokładnie tak, nie rozumiem jak one działają z:

  • %eof
  • not %eof

Pewnie tak, że w przypadku DOW ewaluacja not %eof następuje przed wejściem do pętli, zaś DOU przy zakończeniu obrotu pętli. W efekcie w drugim przypadku pętlę wykonasz przynajmniej raz.
Twój program się może wywalić w "podejściu DOU", np. plik jest pusty, to najpierw wykonasz "doStuff" oraz "read", zaś ewaluacja %eof nastąpi po odczycie. Innymi słowy, "read" może się wywalić na czytaniu z pustego pliku. W przypadku "DOW", najpierw sprawdzane jest czy plik jest niepusty i dopiero wówczas pętla jest wykonywana.

p.s.

Nie znam się na RPG, więc może ktoś odpowie Ci sensowniej ;)

1

Jeżeli to rzeczywiście są pętle do while i do until to różnią się właśnie tym not'em.
do while kontynuuje pętlę kiedy warunek jest true. Wychodzi z pętli kiedy warunek jest false.
Przy do until jest odwrotnie: Kontynuacja przy false, wyjście przy true.

1

Szybkie google: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/sc092508.pdf

"The DOW operation code precedes a group of operations which you want to process when a given condition exists." - p 6-204
"The DOU operation code precedes a group of operations which you want to execute at least once and possibly more than once" - p 6-202

0

**%eof **to funkcja aby wykryć koniec pliku

Np. mam 3 wpisy w PLIKU które chcę wyświetlić w kolejności:

1.A
2.B
3.C

program:
Setll... - ustalam marker na najniższej wartości
Read
dou %eof; - wyświetlaj dopóki dojdziesz do końca pliku tak?
Dsply
Read ...
EndDo;

Dlaczego ten kod jest niepoprawny?

1 użytkowników online, w tym zalogowanych: 0, gości: 1