Конструкция CASE

Возможны ситуации, когда надо проверить не просто соответствие переменной или поля какому-то значению, а отреагировать на различные вариантызначений. Например, нужно вывести на экран сообщение Положительное,если в результате вычислений получилось положительное число, сообщениеНоль, если в результате вычислений получился 0, и Отрицательное, если в результате вычислений получилось отрицательное число.

Можно, конечно, обойтись использованием вложенной проверки при помощи IF.

Но есть способ гораздо изящнее - использовать конструкцию CASE.

Если условие истинно, выполняются указанные команды. Если ни одно изусловий не истинно, выполняются команды, указанные после ключевого словаOTHERWISE. Таким образом, наш пример будет выглядеть следующим образом:

Допустим, мы предоставляем пользователю возможность корректировкитаблицы. Предварительно требуется узнать, хочет пользователь просто просмотреть таблицу или будет вносить исправления. В зависимости от его выбора надо либо запретить корректировку, либо разрешить ее. В случае, если мыразрешили корректировку, надо открывать таблицу в эксклюзивном режиме,чтобы иметь возможность упаковать ее при пометке на удаление каких-либозаписей.

Для реализации задачи требуется знать возможности команды MESSAGEBOX ().Эта функция выводит на экран диалоговое окно указанного типа с сообщениеми возвращает код нажатой в окне кнопки (табл. 3.9).

> <Сообщение> - текст сообщения или переменная, значение которой нужно вывести на экран. Можно использовать функции, результат действиякоторых (возвращаемое значение) и будет отображаться. Максимальнаядлина сообщения - 1024 символа;

>    <Тип_окна> - определяет, какую пиктограмму и какие кнопки выводитьв диалоговом окне. Возможные значения для вариантов наборов кнопокприведены в табл. 3.6, для вариантов пиктограмм - в табл. 3.7, для вариантов установки кнопок по умолчанию - в табл. 3.8. Следует обратить внимание, что допускается суммирование этих значений. Например, надополучить окно с кнопками ОК и Отмена (Cancel), пиктограммой сознаком вопроса и выбором по умолчанию кнопки Отмена (Cancel).В этом случае параметр <Тип_окна> формируется так: 1 + 32 + 256 = 289,то есть надо ставить 289;

>    <3аголовок> - задает строку заголовка диалогового окна;

>    <3адержка> - определяет задержку в миллисекундах. Через указанноевремя произойдет закрытие окна, если пользователь не нажмет никакуюклавишу или не щелкнет мышью по какой-либо кнопке диалогового окна.Если время вышло, MESSAGEBOX () вернет значение -1.

При выводе длинных сообщений при помощи команды MESSAGEBOX () дляпринудительного перевода строки надо использовать символ с кодом 13 (символ перевода строки). Например, "Начало текста на первой строке, " + CHR (13)+ "а окончание на второй! ".

Попробуем реализовать задачу, для чего выполните следующие действия:

1.    Смените текущую папку, выполнив в окне команд (Command) команду

CD ?

2.    Откроется окно, в котором нужно найти созданную нами ранее папкуexample.

3.    Создайте копию таблицы persons, вводя в окне команд (Command) следующие команды:

4.    Выберите из меню File (Файл) команду New (Новый) или щелкните мышью по кнопке Q на панели инструментов Стандартная. Откроетсяокно, представленное на рис. 3.1. Выберите пункт Program (Программа),а затем щелкните мышью по кнопке New file (Новый файл). Откроетсяпустое окно, предназначенное для ввода текста программы.

5.    Ведите следующий ниже текст программы:

6.    Сохраните программу в файле, для чего выберите из меню File (Файл)команду Save (Сохранить) или щелкните по кнопке| на панели инструментов Стандартная. В результате откроется стандартное окно сохранения документа, где тип файла уже будет указан, а от вас потребуется указать имя файла. Назовем наш файл с программой MyPrg3. Щелкнитемышью в поле Save Document (Сохранить документ) и введите MyPrg3.После этого щелкните мышью по кнопке Сохранить (Save).

7.    Выберите команду Do MyPrg3 (Выполнить) в меню Program (Программа) либо щелкните по кнопке | на панели инструментов Стандартная.Программа запустится на выполнение, и на экране появится вопрос окорректировке.

8.    Щелкните по кнопке Да (Yes) и попробуйте отредактировать появившуюся таблицу. Пометьте несколько записей на удаление (либо щелкнувмышью по полю слева от записи так, чтобы это поле потемнело, либонажав комбинацию клавиш Ctrl+T). Запомните, какие записи вы пометили на удаление.

9.    Закончите редактирование, либо нажав клавишу ESC, либо закрыв мышью окно с таблицей. Появится окно с сообщением об упаковке.

10.    В окне с сообщением об упаковке щелкните мышью по кнопке ОК.

11.    Запустите на выполнение программу еще раз, как это было указано в п.7.

12.    На запрос о корректировке щелкните мышью по кнопке Нет (No).

13.    Убедитесь, что записи, помеченные вами на удаление, действительно удалились из таблицы.

14.    Попытайтесь откорректировать записи в появившейся таблице и убедитесь, что это невозможно.

15.    Закончите просмотр таблицы, либо нажав клавишу Esc, либо закрыв мышью окно с таблицей.

Циклы

Допустим, у вас есть массив переменных, содержащий имена таблиц и индексных файлов, и вам требуется переиндексировать каждую таблицу. Можно

написать столько же групп однотипных команд, сколько таблиц в массиве.А если таблиц два десятка? А если список таблиц составляется динамически, тоесть вы заранее не знаете, сколько будет элементов в массиве и какие именнобудут у них значения?

В подобных случаях на помощь приходят конструкции языка Visual FoxPro, называемые циклами. Они позволяют повторить команду или групп)' команд, изменяя их параметры, указанное количество раз или пока выполняется определенноеусловие. Находящиеся внутри цикла команды при этом называют телом цикла.

Циклических конструкций в Visual FoxPro несколько, что называется, «навсе случаи жизни».