Массивы переменных. Обмен данными с базой данных. Работа с двумерным массивом

Страницы работы

Фрагмент текста работы

одномерного массива сортировка выполняется, начиная с элемента номер <вырN1> до элемента с номером <вырN2>. Для двумерного массива сортировка заключается в перестановке строк без изменения их содержимого. Сортировка массива выполняется по столбцу номер <вырМ1>, в соответствии с которым переставляются <вырN2> строк (по умолчанию все строки). <вырN3> может быть равно 0/1 и определяет вид сортировки - возрастание/убывание. Если не задан ни один из необязательных параметров, массив сортируется целиком.

Пример. Пусть имеется массив А(3,2), над которым последовательно выполняются функции ASORT(a,1) и ASORT(a,2,2). Слева направо изображены исходный массив и его новое содержимое после применения функций.

8

1

3

9

5

4

5

4

5

4

3

9

3

9

8

1

8

1

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

Функция

·  AFIELDS(<массив>) копирует структуру активной базы данных во вновь создаваемый двумерный <массив>. Наполнение массива по колонкам и их типы приведены ниже.

1.  Имя поля - символьный тип.

2.  Тип поля (символ: C/D/L/M/N/F) - символьный тип.

3.  Длина поля - числовой тип.

4.  Число десятичных разрядов - числовой тип.

Функция возвращает число полей активной базы. Число строк массива будет совпадать с числом полей базы.

Использовав перечисленные ранее Функции ADEL(), AINS(), ACOPY(), можно легко перестроить массив и создать на его основе новую базу командой вида

CREATE DBF <имя базы данных> FROM ARRAY <массив>

Пример. Создание базы KADR_NEW.DBF со структурой, аналогичной структуре базы KADR.DBF (используется массив А).

USE kadr

=AFIELDS(a)

CREATE DBF k:adr_new FROM ARRAY a

Функция AFIELDS(a) аналогична команде COPY STRUCTURE EXTENDED, которая также создает "слепок" структуры, но в базе данных. Функция может быть предпочтительнее в случае необходимости поддерживать высокую скорость при анализе структуры нужной базы данных. Это может потребоваться, например, для выяснения номера поля в структуре базы. К сожалению, такой функции нет в составе FoxPro, хотя есть обратная - FIELDS(<номер поля>). При наличии массива-структуры номер поля может быть определен следующим образом:

? ASUBSCRIPT(<массив>,ASCAN(<массив>,<имя поля>),1)

или в нашем случае для поля DTR

?ASUBSCRIPT(a, ASCAN(a,'DTR'),1) Функция

·  ADIR(<массив>[,<вырС1>]) заполняет <массив> информацией о файлах, возможно, в соответствии с маской (<вырС1>) и возвращает количество найденных файлов. Функция создает двумерный <массив> с числом строк, равным чнслл7 выявленных файлов, и пятью столбцами. Столбцы содержат информацию DOS о каждом из файлов - имя файла, размер, дату, время создания и атрибут файла соответственно. Типы элементов строки - символьный, числовой, дата, символьный, символьный.

Однако, следует иметь ввиду, что функция ADIR() считывает данные непосредственно с диска, игнорируя текущее состояние открытых файлов, которые, используя буфера, могут иметь, например, уже и иное число записей. Это значит, что достоверными данными о файлах являются только данные, относящиеся к закрытым базам. Если все же некоторые из файлов, описанных маской, открыты, перед использованием функции следует дать команду FLUSH, которая сбросит все буфера на диск.

Пример. Создать массив BD, содержащий сведения о всех базах с именами, начинающимися с буквы К.

=ADIR(bd,'k*.dbf)

Используя функцию ADIR(), можно легко находить размеры любых файлов и суммарное дисковое пространство, занимаемое ими (элемент массива номер (1,2)). Такая"возможность важна при копировании и преобразовании данных для контроля величины необходимой дисковой памяти. Другое применение функции ADIR() - это создание массива для построения меню из имен файлов, если стандартные возможности POPUP-меню с опцией PROMPT FILES оказываются недостаточными. Этот вопрос будет обсужден позже.

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

·  ALEN(<массив> [,<вырN>]) которая возвращает число элементов <массива> (если параметр <вырN> отсутствует).

<вырN> может принимать только одно из следующих значений:

0 - имеет действие аналогичное отсутствию <вырN>;

1 - функция возвращает число строк в массиве. Для одномерного массива оно совпадает с числом элементов

Похожие материалы

Информация о работе