Масиви тимчасових перемінних.
Крім простих тимчасових перемінних FOXPRO також використовує масиви. Задаються масиви за допомогою команди DECLARE (або DIMENSION) із указівкою розмірності масиву в дужках.
DIMENSION a(3,8),b(4)
Дозволений повторний опис масивів з метою економії пам'яті. Найчастіше масиви використовуються при створенні меню, але можна також використовувати масиви для роботи з даними як тимчасове їхнє сховище. Для цього використовують такі команди:
Для одномірних масивів:
SCATTER [FIELDS<поля>][MEMO]TO<масив>[BLANK]/[MEMUAR][BLANK]- перенесення значення полів тільки з поточного запису активного файлу в масив (одномірний) або перемінні (MEMVAR). Якщо масив описаний або його довжина недостатня, він буде створений командою. Параметр [BLANK] - створюється множина незаповнених перемінних або елементів масиву, розміру і типом співпадаючих з полями даних. Якщо не зазначені поля, то переносяться всі поля даних.
Наприклад:
SCATTER FIELDS fam, tab, per TO a MEMO
SCATTER FIELDS fam, tab MEMUAR
Для виконання зворотної дії з масивами служить команда:
GATHER FROM<масив>/MEMUAR[FIELDS<>][MEMO
Для двовимірного масиву використовуються аналогічні команди:
COPY TO ARRAY<масив>[FIELS<поля>][<границя>][FOR<усл>]- пересилає поля з записів поточної бази в елементи рядків масиву. Масив повинний бути оголошений
.APPEND FROM ARRAY<масив>[FOR<усл>][FIELDS<поля>]- виконує зворотну дію.
Крім того існують кілька функцій:
-
функція: AELEMENT() і ASUBSCRIPT() дозволяє з'ясувати місцезнаходження елемента, заданого будь-яким способом.
-
функція ASUBSCRIPT(<масив>,<вир>,<1/2>) повертає з двовимірного масиву положення його елемента номер. Якщо 1- номер рядка 2- номер стовпця.
-
Функція: AELEMENT(<масив>,<вир1>[,<вир2>]) повертає одномірний номер елемента двовимірного масиву по номеру рядка <N1> і стовпця <N2>
Вертикальне popup-меню
Таке меню створюється командами
@ ... MENU і READ MENU TO.
Наступна команда описує форму і зміст меню:
@ Y,X MENU <масив>,<вир1>[,<вир2>] [TITLE <вирс>]
Масив - ім'я одномірного масиву який містить елементи меню символьного типу довжиною до 50 знаків.
Вир1- число елементів меню (до 128).
Вир2- число одночасне зображуваних на екрані меню ( до 17). По умовчанні пред'являються 17 елементів або усі меню.
TITLE <вирс>- заголовок меню, зображений у його верхній частині.
Команда @...MENU тільки відображає меню на екрані. Активація меню здійснюється командою
READ MENU TO <перемінна> [SAVE]
-
Тут <перемінна>- перемінна числового типу, що фіксує номер позиції меню, обраної користувачем. Якщо <перемінна> перед включенням у команду визначена , її значення вкаже початкове положення курсору в меню. Якщо немає або це значення перебуває за межами <масиву>, курсор установиться на перший рядок меню.
-
Параметр SAVE дозволяє зберегти меню на екрані після його використання. Далі воно може бути стерто командою CLEAR.
Виявлення вибору користувача в програмі здійснюється шляхом аналізу <перемінної>, звичайно в структурі DO CASE ... ENDCASE.
П р и м е р:
приведемо програму створення трьохрядкового меню з масиву А(3) і меню-перемінної М, а також саме меню. При його активації курсор виявиться в позиції редагування (m=2).
CLEAR
DIMENSION a(3)
a(1)=' УВЕДЕННЯ ДАНИХ'
a(2)='РЕДАГУВАННЯ'
a(3)=' ВИДАЛЕННЯ'
m=2
@ 8,30 MENU a, 3 TITLE 'МЕНЮ'
. . .
READ MENU TO m
Приклад:
use ccc
clear
c=2
set confirm off
dimension a(3)
a(1)='Перегляд'
a(2)='очищення'
@ 15,15 menu a,2 title 'спробне меню'
read menu to c
do case
case c=1
browse
case c=2
clear
endcase