Программирование >>  Разработка пользовательского интерфейса 

1 ... 29 30 31 [ 32 ] 33 34 35 ... 147


Mid(cExpression, nStartPosition [, nCharactersReturned]) Left(cExpression, nExpression) Ri ght(cExpression, nExpression) Trim( cExpression)

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

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

DATE()

Для определения текущего времени TIME([nExpression ])

Для определения текущей даты и времени в формате дата и время DATETIME()

Если в функции TIME() в качестве выражения задать любую числовую величину, значение текущего времени будет возвращено с сотыми долями секунд, хотя тогда лучше уж обратиться к функции SECONDS().

В Visual Basic существуют аналогичные функции:

Date

Time Now

5. В том случае, если необходимо многокpатно выполнять какой-либо блок команд, пока выполняется заданное условие, может быть использована команда, которая в Visual FoxPro выглядит вот так

DO WHILE lExpression Commands [LOOP] [EXIT]

ENDDO

Каждый раз, когда программа достигает строки с командой DO WHILE, она проверяет значение выражения lExpression, и если оно равно .T., то выполняются команды внутри структуры, если .F., то управление передается строке, следующей за ENDDO. Опция LOOP позволяет после ее указания вернуть управление к строке DO WHILE, а опция EXIT - прекратить выполнение цикла, невзирая на значение lExpression.

Наиболее часто в качестве условия используют выражения:

DO WHILE .NOT. EOF() - до исчерпания записей в таблице;

DO WHILEnMin<<10 .AND. nMax>>100 - пока переменная nMin меньше 10 и переменная nMax больше 100;

DO WHILE .T. - бесконечно выполняемый цикл (выход только по EXIT).

Естественно, что в случае использования опций LOOP и (или) EXIT перед ними должны быть записаны свои условия их выполнения (чаще всего команда IF...ENDIF). Приведем простой пример организации цикла для реакции на действия пользователя.

DO WHILE .T. CLEAR

WAIT Наберите цифру 1 или 2 TO cNumber DO CASE

CASE cNumber = 1

? Вы набрали цифру 1

CASE cNumber = 2

? Вы набрали цифру 2 OTHERWISE

? Ошибка: введенное значение не 1 или 2!

ENDCASE

WAIT Хотите попробовать еще раз (Y/N) TO cYesNo IF UPPER(cYesNo) <<>> Y

EXIT ENDIF ENDDO



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

В Visual Basic для записи этой команды надо использовать один из следующих эквивалентных вариантов синтаксиса:

Do [{While Until} Expression] [Commands] [Exit Do] [Commands]

Loop

Do [Commands] [Exit Do] [Commands] Loop [{While Until} Expression]

Как правильно использовать эту команду, видно из следующего примера:

lCheck = True nCounter = 0

Do Первый (внешний) цикл

Do While nCounter << 20 Второй (внутренний) цикл nCounter = nCounter + 1 If nCounter = 10 Then lCheck = False

Exit Do Выход из второго цикла

End If

Loop

Loop Until lCheck = False Выход из первого цикла

4. Если мы запишем в программу некую последовательность команд, то они будут выполняться построчно от начала до конца программы. Вряд ли таким образом мы сможем написать мощную программу, которая должна обрабатывать действия пользователя в зависимости от тех или иных условий. Нам потребуются средства для управления последовательностью выполнения команд.

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

IF lExpression

Commands

[ELSE

Commands]

ENDIF

В качестве условия может быть использовано любое выражение, в том числе и логическое. На месте команд, в свою очередь, может стоять снова команда IF (вложенное условие). Если выражение равно .T., то выполняются команды, заключенные между IF и ELSE. Если .F., то выполняются команды, следующие за ELSE, а в том случае, если эта необязательная опция ELSE в команде не используется, выполняются команды, следующие за ENDIF.

В Visual Basic эту команду можно записать на одной строке:

If lExpression Then Commands [Else Commands] или в более сложном виде:

If Expression Then

[ Commands] [ElseIf Expression n Then

[Commands]] ...

[Else

[Commands]]

End If

Если выражение Expression имеет значение True, выполняются команды, следующие за ключевым словом THEN. В противном случае выполняется один из блоков, в котором



Expression n будет соответствовать выражению Expression. Если и этого не произойдет, будет выполнен блок команд, следующих за ключевым словом ELSE.

Для выбора по условию очень эффективно можно использовать функцию, которая по смыслу похожа на рассматриваемую команду и имеет совершенно одинаковый синтаксис как в Visual FoxPro, так и в Visual Basic IIF(lExpression, Expression1, Expression2)

Возвращает значение Expression1, если lExpression =.T., и значение Expression2, если lExpression =.F.; Expression1 и Expression2 должны быть одного типа, например: TITLE = IIF(nSign=0, автомобиль , автопоезд ) + cModel

Эта функция может использоваться и для выбора выполняемых подпрограмм, например:

cProc var = IIF(nVid>>5,cProc 1,IIF(nVid<<2,cProc 2,cProc 3)) DO (cProc var)

Здесь, в зависимости от значения переменной nVid, будет выполняться та или другая процедура, причем для увеличения числа вариантов в качестве Expression2 используется еще одна - вложенная функция IIF(). Использование этой функции для программного ветвления, там где это возможно, значительно увеличивает быстродействие программы и делает ее значительно меньше, чем при употреблении команды IF...ENDIF.

3. Более сложное ветвление, когда есть несколько условий, в зависимости от которых надо выполнить ту или иную группу команд, организуется стpуктуpной командой, которая в Visual FoxPro выглядит так:

DO CASE

CASE lExpression1

Commands [CASE lExpression2

Commands]

[OTHERWISE Commands] ENDCASE

Команда выполняет проверку условий, заданных в операторах CASE. Они просматриваются последовательно сверху вниз, и, как только первое из них оказывается верным (логическое выражение равно .T.), выполняется блок команд для этого CASE, после чего управление передается строке программы, следующей за ENDCASE. Если ни одно из условий не истинно, выполняется опция OTHERWISE, пpи отсутствии этой опции команда игнорируется.

Например:

nChoice = 3

DO CASE

CASE nChoice = 1

? Выбрано значение 1 CASE nChoice = 2

? Выбрано значение 2 OTHERWISE

? Выбрано неправильное значение!

RETURN

ENDCASE

В Visual Basic синтаксис этой структурной команды организован несколько по-иному:

Select Case Expression [Case Expression n

[Commands]] ... [Case Else

[Commands]] End Select

Выполняются те блоки CASE, в которых выражение Expression n соответствует выражению Expression. Если такого соответствия не обнаруживается, то выполняется блок CASE ELSE. Приведенный выше пример можно записать примерно так:



1 ... 29 30 31 [ 32 ] 33 34 35 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика