Система управления базами данных Visual FoxPro5.0 - от начальных навыков к профессиональной работе. Крушель Е.Г - 51 стр.

UptoLike

Составители: 

97
В этой конструкции файловый указатель перемещается по таблице данных (можно
ограничить его перемещение путем указания диапазона<scope>). По умолчанию диапазон
- вся база (ALL). Если встретится запись, удовлетворяющая условию <exprL1> (если
форма конструкции - с FOR...) (или <exprL2>, если WHILE>), то выполняется серия
команд внутри цикла.
Форма с FOR... предусматривает просмотр
всего заданного диапазона. Форма с
WHILE... просматривает записи в заданном диапазоне<scope> только пока истинно
<exprL2>; цикл обрывается на первой же записи, для которой <exprL2> ложно.
LOOP и EXIT имеют тот же смысл, что и в цикле DO WHILE...
ENDDO (см.п.2.4.1).
Пример см. в п. 2.4.5.
2.4.4. Иллюстрация к циклу
DO WHILE...ENDDO и к конструкции
ветвления.
Наберите программу whilloop.prg, НАЗНАЧЕНИЕ которой: вывести на экран
фамилию отличника набора 1998 г., который в списке фамилий встретится первым.
В данной программе по возможности исключены все указания на конкретный файл
(кроме его имени и наименований полей), см. замечания к стилю программирования в
Visual FoxPro5.0
*Программа
whilloop.prg
CLEAR
USE students
GO TOP && Файловый указатель - выше первой записи.
* Цикл: пока файловый указатель - не в конце файла
DO WHILE .NOT.EOF( )
IF Год_поступ<>1997 && Досрочный возврат к началу цикла,
SKIP && если запись НЕ относится к студенту-1998.
LOOP && Перемещение файлового указателя
ENDIF && командой SKIP.
IF Балл_сес01+
Балл_сес02<10 && Досрочный возврат к началу цикла,
SKIP && если студент-1998 - НЕ отличник.
LOOP && Студенты-1997 в данный фрагмент
ENDIF && программы «не попадут» из-за ветвления выше.
?”Отличник-1998, первый в списке: “+ФИО
* Вывод на экран фамилии отличника 1998, «попавшегося» при просмотре базы данных
* ПЕРВЫМ.
EXIT && Досрочное прекращение цикла после
этого.
ENDDO && Конец цикла.
Запустите программу и обратите внимание на две особенности:
а) все команды, предусмотренные в программе, будут выполнены для всех записей
файла только в том случае, если все студенты набора 1998, и среди них нет отличников.
При всех других исходных данных будет проанализировано меньшее число записей или
выполнено
меньшее число операций.
б) Запустите программу еще раз. Вы заметите, что она выполнится гораздо
быстрее: Visual FoxPro 5.0 автоматически выполняет компиляцию программы и при
повторном запросе выполняет ее как компилированную.
2.4.5. Иллюстрация к циклу SCAN...ENDSCAN.
Наберите программу scn.prg, назначение которой - вывод на экран фамилий всех
студентов-отличников набора-1998.
CLEAR
                                         97

   В этой конструкции файловый указатель перемещается по таблице данных (можно
ограничить его перемещение путем указания диапазона). По умолчанию диапазон
- вся база (ALL). Если встретится запись, удовлетворяющая условию  (если
форма конструкции - с FOR...) (или , если WHILE>), то выполняется серия
команд внутри цикла.
   Форма с FOR... предусматривает просмотр всего заданного диапазона. Форма с
WHILE... просматривает записи в заданном диапазоне только пока истинно
; цикл обрывается на первой же записи, для которой  ложно.
       LOOP и EXIT имеют тот же смысл, что и в цикле DO WHILE...
ENDDO (см.п.2.4.1).
       Пример см. в п. 2.4.5.

    2.4.4. Иллюстрация к циклу DO WHILE...ENDDO и к конструкции
ветвления.
        Наберите программу whilloop.prg, НАЗНАЧЕНИЕ которой: вывести на экран
фамилию отличника набора 1998 г., который в списке фамилий встретится первым.
В данной программе по возможности исключены все указания на конкретный файл
(кроме его имени и наименований полей), см. замечания к стилю программирования в
Visual FoxPro5.0
*Программа whilloop.prg
CLEAR
USE students
GO TOP                           && Файловый указатель - выше первой записи.
* Цикл: пока файловый указатель - не в конце файла
DO WHILE .NOT.EOF( )
  IF Год_поступ<>1997            && Досрочный возврат к началу цикла,
    SKIP                         && если запись НЕ относится к студенту-1998.
    LOOP                         && Перемещение файлового указателя
  ENDIF                          && командой SKIP.
  IF Балл_сес01+ Балл_сес02<10 && Досрочный возврат к началу цикла,
    SKIP                         && если студент-1998 - НЕ отличник.
    LOOP                         && Студенты-1997 в данный фрагмент
 ENDIF                           && программы «не попадут» из-за ветвления выше.
 ?”Отличник-1998, первый в списке: “+ФИО
* Вывод на экран фамилии отличника 1998, «попавшегося» при просмотре базы данных
* ПЕРВЫМ.
   EXIT                          && Досрочное прекращение цикла после этого.
 ENDDO                           && Конец цикла.

   Запустите программу и обратите внимание на две особенности:
      а) все команды, предусмотренные в программе, будут выполнены для всех записей
файла только в том случае, если все студенты набора 1998, и среди них нет отличников.
При всех других исходных данных будет проанализировано меньшее число записей или
выполнено меньшее число операций.
      б) Запустите программу еще раз. Вы заметите, что она выполнится гораздо
быстрее: Visual FoxPro 5.0 автоматически выполняет компиляцию программы и при
повторном запросе выполняет ее как компилированную.

       2.4.5. Иллюстрация к циклу SCAN...ENDSCAN.

      Наберите программу scn.prg, назначение которой - вывод на экран фамилий всех
студентов-отличников набора-1998.
      CLEAR