Файл: Особенности и примеры использования массивов при разработке программ (Особенности использования массивов).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 16.05.2023

Просмотров: 108

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Alanguage(arrayOfFuncNames, 2)

for k = 1 to Alen(arrayOfFuncNames, 1)

if 'M' $ arrayOfFuncNames(k, 2) then

? arrayOfFuncNames(k, 1), arrayOfFuncNames(k, 2)

endif

next

Результат:

COMPROP

M2-3

CREATEOBJECTEX

M2-3

CURSORTOXML

M2-8

DDEABORTTRANS

M1

DDEADVISE

M4

DDEENABLED

M0-2

DDEEXECUTE

M2-4

DDEINITIATE

M2

DDELASTERROR

M0-1

DDEPOKE

M3-5

DDEREQUEST

M2-4

DDESETOPTION

M1-2

DDESETSERVICE

M2-3

DDESETTOPIC

M2-3

DDETERMINATE

M1

DISPLAYPATH

M2

FORCEEXT

M2

FORCEPATH

M2

GETINTERFACE

M1-3

GETWORDCOUNT

M1-2

GETWORDNUM

M2-3

JUSTDRIVE

M1

JUSTEXT

M1

JUSTFNAME

M1

JUSTPATH

M1

JUSTSTEM

M1

XMLTOCURSOR

M1-3

XMLUPDATEGRAM

M0-3

Функция ALEN(ArrayName [, nArrayAttribute]) возвращает число элементов, строк или столбцов в массиве ArrayName.

Параметр:

nArrayAttribute – принимает следующие значения:

0 (или опущен) – функция вернет число элементов в массиве;

1 – функция вернет число строк в массиве;

2 – функция в случае двумерного массива вернет число столбцов в массиве, а в случае одномерного массива – 0.

Пример. Печатаются имена файлов и поддиректорий, отобранных в массив fileArray.

&& Устанавливаем директорию по умолчанию

set default to c:

&& Формируем массив fileArray, занося в него описания системных и скрытых файлов,

&& а также поддиректорий корневого каталога диска с:

if Adir(fileArray, "", "DHS") > 0 then

&& Вывод имен файлов и поддиректорий

&& для определения верхней границы цикла FOR используем ALEN( )

for iRow = 1 to Alen(fileArray, 1)

fileName = fileArray(iRow, 1)

fileAtributes = fileArray(iRow, 5)

do case

case "D" $ fileAtributes

? "Папка ", fileName

case "S" $ fileAtributes

? "Системный" + Iif("H" $ fileAtributes, ", скрытый", "") + " файл", fileName

case "H" $ fileAtributes

? "Скрытый файл ", fileName

endCase

endFor

endif

Возможный результат:

Папка WINDOWSСистемный скрытый файл BOOTFONT.BIN

Системный скрытый файл NTLDR

Системный скрытый файл NTDETECT.COM

Системный скрытый файл BOOT.INI

Папка DOCUMENTS AND SETTINGS


Папка PROGRAM FILES

Функция ALINES(ArrayName, cExpression [, nFlags] [cParseChar [, cParseChar2 [, …]]]) копирует каждую строку cExpression в соответствующий элемент одномерного массива ArrayName. Возвращает число элементов в результирующем массиве.

По сравнению с функцией MLINES( ), позволяющей выполнить аналогичные действия, ALINES( ) работает быстрее, программы с ALINES( ) более компактны и, кроме того, на функционирование ALINES( ) не оказывает влияния установка команды SET MEMOWIDTH.

Параметры:

cExpression – символьное выражение или memo-поле, строки которого копируются в массив. Могут быть использованы 2-байтовые символьные строки.

Если cExpression – это пустая строка или NULL-значение, то результирующий массив будет состоять из одного элемента, содержащего пустую строку.

Если cExpression имеет тип Varbinary или Blob, то ALINES( ) создает массив с элементами типа Varbinary.

nFlags – принимает приведенные в табл. 6.12.

Таблица 6.12

Значения параметра nFlags

Бит

nFlags (сумма)

Описание

0

1

По умолчанию. Удаляет ведущие и хвостовые пробелы в строке; для типов Varbinary и Blob удаляет ведущие и хвостовые нулевые байты

1

2

Включает элемент в массив, даже если элемент пустой

2

4

Не включает пустые элементы в массив

3

8

Задает чувствительные к регистру символы конца строки

4

16

Включает символы конца строки в массив

Функция APROCINFO(ArrayName, cFileName [, nType]) формирует массив ArrayName, содержащий элементы встроенного языка VFP, имеющиеся в PRG-файле cFileName. Возвращает число строк результирующего массива. Параметр nType задает вид информации, записываемой в массив ArrayName. Действие параметра описано в табл. 7.

Таблица 7

Действие параметра nType

nType

Что содержит массив

Состав строки массива

Номер
столбца

Что содержит

0

Описания всех элементов языка

1

Имя элемента

2

Номер строки в файле

3

Вид элемента

4

Отступ (используется с директивами #IF для описания их уровня вложенности)

1

Описания определений классов

1

Имя класса

2

Номер строки в файле

3

Родительский класс

4

Является ли OLE-объектом

2

Описания процедур классов

1

Имя процедуры, имеющее в качестве префикса имя класса

2

Номер строки в файле

3

Описания директив компилятора

1

Имя, определяемое директивой

2

Номер строки в файле

3

Вид директивы


По умолчанию nType = 0.

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

Define, если элемент – это директива #DEFINE;

Directive в случае иной директивы компилятора;

Class, если элемент – это определения класса

Procedure, если элемент – это процедура, функция, событие или метод.

Функция полезна на этапе разработки программ и их последующего документирования.

Пример. Функция APROCINFO( ) применяется для анализа следующей программы, хранящейся в файле d:\ProcForProcInfo.prg.

&& Файл d:\ProcForProcInfo.prg

clear

&&

#define NTIMES 3

&&

oAB = CreateObject("APlusB")

&& Идентификатор объекта должен передаваться по ссылке

c = FindC(0, 3, @oAB)

? c

&& Освобождаем объект oAB

release oAB

&&

define class APlusB as Custom

A = 1

B = 2

function AandB

return This.A + This.B

endFunc

endDefine

&&

function FindC(a, b, oAB)

oAB.A = a

oAB.B = b

c = 0

for k = 1 to NTIMES

c = c + oAB.AandB( )

oAB.A = oAB.A + 1

oAB.B = oAB.B + 1

endFor

return c

endFunc

Для вывода результата использован следующий, помещенный в файл d:\goAProcInfo.prg код:

&& Файл d:\goAProcInfo.prg

&& Вызываем APROCINFO( ) с различными значениями параметра nType

for nType = 0 to 3

?

? 'nType = ', nType

&& Формируем массив arrayPRG

AProcInfo(arrayPRG, 'd:\ProcForProcInfo.prg', nType)

for iRow = 1 to Alen(arrayPRG, 1)

? && Переход на новую строку

&& Выводим элементы строки iRow массива на одной строке окна вывода

for iCol = 1 to Alen(arrayPRG, 2)

?? arrayPRG(iRow, iCol), ' '

next

next

next

Результат:

nType = 0 (элементы)

NTIMES

3

Define

0

APlusB AS Custom

10

Class

0

APlusB.AandB

13

Procedure

0

findC

18

Procedure

0

nType = 1 (класс)

APlusB

10

Custom

nType = 2 (процедура)

APlusB.AandB

13

nType = 3 (директива)

NTIMES

3

Define

Функция ASCAN(ArrayName, eExpression [, nStartElement [, nElementsSearched [, nSearchColumn [, nFlags]]]]) ищет в массиве ArrayName элемент равный eExpression. В случае удачи возвращает номер первого найденного элемента (или номер строки массива); возвращает 0, если поиск не дал результатов. Если нужно независимо использовать параметр nSearchColumn, то для nStartElement и nElementsSearched задаются отрицательные значения. Если нужно независимо использовать параметр nFlags, то вдобавок значение nSearchColumn устанавливается меньшим нуля.


Как и в других функциях значения параметров не должны приводить к нарушению границ массива.

В случае символьных данных по умолчанию поиск чувствителен к регистру имеющихся в eExpression букв.

Параметры:

eExpression – значение для поиска. Возможен любой тип данных.

nStartElement – номер элемента, с которого начинается поиск. В случае двумерного массива номер элемента по его индексам можно получить, употребив AELEMENT( ). При отсутствии параметра поиск ведется с первого элемента.

nElementsSearched – число просматриваемых элементов. При отсутствии параметра поиск ведется вплоть до последнего элемента.

nSearchColumn – номер столбца, в котором ведется поиск. Полезен, в частности, при работе с массивом, созданным функцией AFIELDS( ). Если параметр меньше нуля или равен ему, то поиск ведется во всем массиве (с учетом ограничений, устанавливаемых nStartElement и nElementsSearched). Если положителен, то поиск ведется в столбце nSearchColumn начиная с элемента nStartElement; число участвующих в поиске элементов равно nElementsSearched. Так, в случае массива twoDArray формы 3×4 вызов Ascan(twoDArray, 9, 2, 2, 3) обеспечит поиск равных числу 9 элементов в третьем столбце среди второго и третьего элементов столбца. Вызов Ascan(twoDArray, 9, 2, 3, 3) недопустим, поскольку приводит к нарушению верхней границы третьего столбца.

nFlags – задает дополнительные условия поиска. Принимает значения от 1 до 15 включительно. При наличии параметра функция ASCAN( ) интерпретирует в соответствии с табл. 8 каждый бит параметра.

Таблица 8

Биты параметра nFlags

Бит

Условия поиска, если значение бита равно 1

0

Поиск нечувствителен к регистру

1

При поиске SET EXACT установлен в ON; действует, если 2-й бит имеет значение 1

2

Позволяет изменять (на время поиска) системную EXACT-настройку; если значение бита 0, то при поиске используется системная EXACT-настройка

3

В случае двумерного массива функция ASCAN( ) возвращает номер первой строки, имеющей искомый элемент

Полный перечень возможных условий поиска приведен в табл. 9.

Таблица 9

Условия поиска, задаваемые параметром nFlags

nFlags

Биты

Описание

0

0000

Ищет по правилам, существовавшим в VFP версии 6 и в более ранних версиях

1

0001

Нечувствителен к регистру

2

0010

Ищет по правилам, существующим начиная с версии 7 VFP

3

0011

Нечувствителен к регистру

4

0100

Exact OFF

5

0101

Нечувствителен к регистру, EXACT OFF

6

0110

EXACT ON

7

0111

Нечувствителен к регистру, EXACT ON

8

1000

Возвращает номер строки

9

1001

Нечувствителен к регистру, возвращает номер строки

10

1010

Возвращает номер строки

11

1011

Нечувствителен к регистру, возвращает номер строки

12

1100

Возвращает номер строки, EXACT OFF

13

1101

Нечувствителен к регистру, возвращает номер строки, EXACT OFF

14

1110

Возвращает номер строки, EXACT ON

15

1111

Нечувствителен к регистру, возвращает номер строки, EXACT ON


Пример 1. В одном и том же массиве для найденного элемента сначала возвращается его номер, а затем номер строки.

n = 3

dimension twoDArray(n, n)

for iCol = 1 to n

for iRow = 1 to n

twoDArray(iCol, iRow) = iCol

next

next

&& Массив twoDArray

&&

1

1

1

&&

2

2

2

&&

3

3

3

&& Функция вернет номер элемента

for iCol = 1 to n

?? Ascan(twoDArray, iCol) && Напечатает: 1 4 7

next

?

&& Функция вернет номер строки

for iCol = 1 to n

?? Ascan(twoDArray, iCol, –1, –1, –1, 8) && Напечатает: 1 2 3

next

Функция ASELOBJ(ArrayName, [ 1 | 2 | 3 ]) помещает сведения о текущем элементе управления или контейнере, определенном в проектировщике формы или класса, в массив ArrayName.

При вызове без второго параметра в массив ArrayName заносятся ссылки на выбранные элементы управления. Тип ссылки – Object. Число элементов массива равно числу выбранных элементов управления.

Возвращает 1 при успешном выполнении или 0 – в противном случае.

Параметр:

1 – формируется массив из одного элемента, содержащего ссылку на контейнер выбранного элемента управления.

2 – формируется массив из одного элемента, содержащий ссылку на объект DataEnvironment выбранной формы. Получив эту ссылку, можно, например, изменить свойства объекта.

3 – формирует массив из трех элементов, содержащий контекст текущего окна редактирования данных: ссылка на контейнер объекта, полное имя SCX- или VCX-файла и имя INCLUDE-файла, если таковой имеется.

Функция ASESSIONS(ArrayName) формирует одномерный массив ArrayName, содержащий номера сессий данных. Возвращает число сессий данных. Пример см. в разд. 2.5.12.

Функция ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder [, nFlags]]]) сортирует элементы массива ArrayName в возрастающем или убывающем порядке. Все участвующие в сортировке элементы должны быть одного типа. Возвращает 1, если сортировка выполнена, или –1 – в противном случае.

Параметры:

nStartElement – задает элемент, с которого начинается сортировка. Если параметр опущен, то массив сортируется начиная с первого элемента. В случае одномерного массива он сортируется начиная с элемента под номером nStartElement. В случае двумерного массива nStartElement определяет строку, в которой начинается сортировка, и столбец, элементы которого сортируются. При сортировке состав каждой строки сохраняется.

Пример. Сортируется по возрастанию двумерный массив формы 4×3 начиная с 4-го элемента, то есть элемента с индексами (2, 1).