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".