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

Odpowiedz Nowy wątek
2019-08-21 22:41
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?

Pozostało 580 znaków

2019-08-22 09:48
1

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

  • Dow - do while
  • Dou - do until
edytowany 1x, ostatnio: yarel, 2019-08-22 09:48

Pozostało 580 znaków

2019-08-22 10:22
0

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

  • %eof
  • not %eof

Pozostało 580 znaków

2019-08-22 10:46
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 ;)

Pozostało 580 znaków

2019-08-22 12:07
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.

Pozostało 580 znaków

2019-08-22 12:23
1

Szybkie google: https://www.ibm.com/support/k[...]w_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

Pozostało 580 znaków

2019-08-22 13:25
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?

edytowany 1x, ostatnio: greg13, 2019-08-22 13:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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