Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Функции преобразования данныхVisual Basic предоставляет несколько функций для преобразования одного типа данных в другой. Используйте эти функции для устранения ошибок несовпадения типов и обеспечения явного контроля за типами данных в выражениях. Например, при получении (на этапе отладки приложения) сообщения об ошибке несовпадения типов в определенном выражении можно преобразовать значения в выражении в типы, совместимые друг с другом, используя функции преобразования. Можно сохранять результат выражения в диапазоне численного типа Single (большинство численных выражений имеют результатом значение типа Double); в таком случае, следует использовать функцию CSng для преобразования результата выражения в число типа Single, как показано в листинге 6.1. Листинг 6.1. Использование функции CSng 1: Sub CSngDemo() 2: Dim d_Var1 As Double 3: Dim s_Var2 4: d_Var1 = 412 5: s_Var2 = CSng(352 / 17) 6: MsgBox TypeName(s_Var2) 7: End Sub Проверьте, как работает код листинга 6.1. В табл. 6.3 приведены функции преобразования данных в Visual Basic. В этой таблице N — это любое численное, S — любое строковое, а E — выражение любого типа. Аргументы каждой функции являются обязательными, если не указано иначе.
Таблица 6.3. Функции преобразования данных
Наиболее часто используемые функции — это функции (объединенные в конце табл. 6.3 в группу), начинающиеся с буквы С (от слова conversion), за которыми следует сокращение имени типа: CStr, CSng, CDbl и так далее (эти функции напечатаны полужирным шрифтом с фиксированной шириной, поскольку они являются ключевыми словами в Visual Basic). Далее рассматриваются некоторые из функций, приведенных в табл. 6.3. Функция Format Хотя Visual Basic может автоматически преобразовывать любой тип данных в строку для отображения, например, с помощью функции MsgBox или для вставки в выходной файл (документ и т.д.), формат данных, который выбирает Visual Basic, может не совпадать с желаемым. При преобразовании числа в строку Visual Basic не добавляет в строку разделитель тысяч, символы доллара или другое числовое форматирование. Кроме того, если число очень большое или очень малое, Visual Basic создает строку, представляющую это число в экспоненциальном формате. Например, число 3145.25 преобразуется в строку “3145,25”. Если это число представляет сумму в долларах, может оказаться предпочтительнее преобразовать его в строку, содержащую символ доллара и разделитель тысяч: “$3,145.25”. Аналогично, при преобразовании дат Visual Basic всегда применяет короткий формат даты и времени, используемый операционной системой компьютера, и всегда отображает и дату, и время. Вы можете использовать другой формат даты или времени или отображать только дату или только время. Для получения почти любого формата дат при преобразовании чисел или дат в строки можно использовать функцию Format; можно даже использовать функцию Format для форматирования строковых данных в соответствии с определенным шаблоном. Можно также создавать пользовательские экранные форматы, если вам необходимо, чтобы данные появлялись в каком-либо особом формате. Синтаксис оператора Format следующий: Синтаксис Format (Expression [, Format [, Firstdayofweek [, Firstweekofyear ]]]) Здесь аргументы означают:
Для аргументов Firstdayofweek и Firstweekofyear в Visual Basic имеются именованные константы, значения которых можно найти в Приложении В. Чтобы использовать функцию Format, можно либо задать предопределенный формат (называемый именованным форматом (named format) <$I[] именованным форматом (named format)>), либо создать образ определенного формата, используя комбинации особой группы символов, называемых символами-заполнителями (placeholders) <$I[] символами-заполнителями (placeholders)>. Используйте образ, который создается с помощью символов-заполнителей, если ни один из именованных форматов не отвечает вашим запросам. Табл. 6.4 содержит доступные именованные форматы и объясняет их действие. Таблица 6.4. Именованные форматы для использования с функцией Format
Например, если при помощи следующего кода List1.AddItem "General Date: " & Format(#2/27/1976#, "General Date") List1.AddItem "Long Date: " & Format(#2/27/1976#, "Long Date") List1.AddItem "Medium Date: " & Format(#2/27/1976#, "Medium Date") List1.AddItem "Short Date: " & Format(#2/27/1976#, "Short Date") List1.AddItem "Long Date: " & Format(#2/27/1976#, "Long Date") List1.AddItem "----------------" List1.AddItem "Long Time: " & Format(#2:27:35 AM#, "Long Time") List1.AddItem "Medium Time: " & Format(#2:27:35 AM#, "Medium Time") List1.AddItem "Short Time: " & Format(#2:27:35 AM#, "Short Time") List1.AddItem "----------------" List1.AddItem "Yes/No: " & Format(1, "Yes/No") List1.AddItem "True/False: " & Format(1, "True/False") List1.AddItem "On/Off: " & Format(1, "On/Off") заполнить элемент управления ListBox с именем List1 на некоторой форме, в результате мы получим окно со списком, представленное на рис. 6.3. Рис. 6.3 Окно со списком, заполненное форматированными строками Форматы long, medium и short date и time можно изменять посредством Панели управления (Windows Control Panel). Здесь же можно также изменять символы, используемые для разделителя тысяч и десятичного разделителя. Если вам необходимо создавать пользовательские форматы для чисел, дат или времени, нужно создать строку, содержащую символы-заполнители, для задания образа форматирования, который должна будет использовать функция Format при преобразовании значений в строку. В табл. 6.5 приведены пользовательские символы-заполнители, применяемые для создания образов форматов с применением функции Format. Таблица 6.5. Символы-заполнители для создания пользовательских форматов
Например, если при помощи следующего кода List1.AddItem "0: " & Format(124.5, "0") List1.AddItem "00000.000: " & Format(124.5, "00000.000") List1.AddItem "----------------" List1.AddItem "#####.###: " & Format(124.5, "#####.###") List1.AddItem "$#####.###: " & Format(4124.5, "$#####.###") List1.AddItem "$###,###.00: " & Format(4124.5, "$####,###.00") List1.AddItem "----------------" List1.AddItem "#.####E+00: " & Format(0.0445, "#.####E+00") List1.AddItem "#.####E-00: " & Format(0.0445, "#.####E-00") List1.AddItem "----------------" List1.AddItem "#0.00%: " & Format(0.12345, "#0.00%") List1.AddItem "----------------" List1.AddItem Format("5105551212", "(@@@) - @@@ - @@@@") заполнить элемент управления ListBox с именем List1, в результате мы получим окно со списком, представленное на рис. 6.4. Рис. 6.4 Окно со списком, заполненное форматированными данными При использовании функции Format для форматирования строк и чисел можно создавать дополнительные секции в образе формата, чтобы изменять формат отображения в соответствии с форматируемым значением. Секции в образе формата разделяются точкой с запятой (;). Например, следующий образ содержит две секции и форматирует отрицательные числа иначе, чем положительные:
$###,###,##0.00;$(###,###,##0.00)
Вышеприведенный образ форматирует число 1234567.89 как $1 234 567.89 и форматирует –1234567.89 как $(1 234 567.89). В образе формата можно для форматирования строки иметь две секции. Если образ формата содержит только одну секцию, этот образ применим ко всем форматируемым строкам. Если образ формата содержит две секции, первая секция применима к строковым данным, а вторая — к значениям Null и строкам нулевой длины (то есть, к строкам, которые не содержат символов, представленных с помощью ""). Рассмотрим следующий оператор, отображающий результат функции Format, используемый с образом из двух частей для строк.
MsgBox Format(strData, "(@@@) - @@@ - @@@@; не номер телефона")
Приведенный выше оператор отображает (510) – 555 – 1212 в результирующем окне сообщения, если переменная strData содержит "5105551212". Если strData содержит строку нулевой длины (""), то предыдущий оператор отображает в окне сообщения строку "не номер телефона". Для форматирования числовых значений можно иметь до четырех различных секций в образе формата. Первая секция используется для положительных чисел, вторая — для отрицательных чисел, третья — для нулевых значений, а четвертая — для значений Null. Следующий образ формата содержит четыре секции:
"$###,###,##0.00; $(###,###,##0.00); 0.00; Null value"
Приведенный выше образ формата форматирует отрицательные числа с круглыми скобками, указывает, что нулевые значения должны быть показаны, как 0.00, и возвращает текстовое сообщение, если форматируемое значение равно Null. Этот образ формата форматирует число 1234567.89, как строку "$1 234 567.89". Число –1234567.89 форматируется в строку "$(1 234 567.89)". Значение 0 форматируется в строку "0.00", тогда как значение Null форматируется в строку "Null value". Для проверки изложенного выше вы можете выполнить следующий код (с использованием элемента ListBox с именем List1) и получить окно списка, похожее на представленное на рис. 6.5.
List1.AddItem "$###,###,##0.00;$(###,###,##0.00): " & _ Format(1234567.89, "$###,###,##0.00;$(###,###,##0.00)") List1.AddItem "$###,###,##0.00;$(###,###,##0.00): " & _ Format(-1234567.89, "$###,###,##0.00;$(###,###,##0.00)") List1.AddItem "----------------"
List1.AddItem "(@@@) - @@@ - @@@@; не номер телефона: " & _ Format("", "(@@@) - @@@ - @@@@; не номер телефона") List1.AddItem "(@@@) - @@@ - @@@@; не номер телефона: " & _ Format("0956667777", "(@@@) - @@@ - @@@@; не номер телефона") List1.AddItem "----------------"
List1.AddItem "$###,###,##0.00; $(###,###,##0.00); 0.00; Null:" & _ Format(1234567.89, "$###,###,##0.00; $(###,###,##0.00); 0.00; Null") List1.AddItem "$###,###,##0.00; $(###,###,##0.00); 0.00; Null:" & _ Format(-1234567.89, "$###,###,##0.00; $(###,###,##0.00); 0.00; Null") List1.AddItem "$###,###,##0.00; $(###,###,##0.00); 0.00; Null:" & _ Format(0#, "$###,###,##0.00; $(###,###,##0.00); 0.00; Null") List1.AddItem "$###,###,##0.00; $(###,###,##0.00); 0.00; Null:" & _ Format(Null, "$###,###,##0.00; $(###,###,##0.00); 0.00; Null"
Рис. 6.5 Окно со списком, заполненное форматированными данными Кроме общей функции форматирования, вы можете использовать функции специального форматирования, приведенные в табл. 6.6 (и в Приложении В).
Таблица 6.6. Функции специального форматирования
Функция FormatCurrency возвращает выражение, отформатированное как денежное (валютное) выражение с использованием значения, заданного на вкладке Денежная единица окна Свойства: Язык и стандарты, доступного из Панели управления. Синтаксис функции FormatCurrency следующий: Синтаксис FormatCurrency( Expression [, NumDigitsAfterDecimal [, IncludeLeadingDigit [, UseParensForNegativeNumbers [, GroupDigits ]]]]) Здесь аргументы означают:
Аргументы IncludeLeadingDigit, UseParensForNegativeNumbers и GroupDigits могут принимать только следующие значения: vbTrue, vbFalse и vbUseDefault (True, False и Использовать региональные настройки компьютера). В качестве примера приведем фрагмент кода и результат его работы (рис. 6.6) в виде окна списка. Dim MyDouble1 As Double, MyDouble2 As Double MyDouble1 = -22323.123 MyDouble2 = 0.000123 List1.AddItem FormatCurrency(MyDouble1, 7) List1.AddItem FormatCurrency(MyDouble2, 7, vbTrue) List1.AddItem FormatCurrency(MyDouble2, 7, vbFalse) List1.AddItem FormatCurrency(MyDouble1, 7, vbTrue, vbTrue) List1.AddItem FormatCurrency(MyDouble1, 7, vbTrue, vbFalse) List1.AddItem FormatCurrency(MyDouble1, 7, vbTrue, vbTrue, vbTrue) Рис. 6.6 Окно со списком, заполненное форматированными данными с использованием функции FormatCurrency Синтаксис функции FormatDateTime следующий: Синтаксис FormatDateTime( Date [, NamedFormat ]) Здесь аргументы означают:
Аргумент NamedFormat может принимать следующие значения:
В качестве примера приведем фрагмент кода и результат его работы (рис. 6.7) в виде окна списка. Dim MyDate As Date MyDate = Now() List1.AddItem FormatDateTime(MyDate, vbGeneralDate) List1.AddItem FormatDateTime(MyDate, vbLongDate) List1.AddItem FormatDateTime(MyDate, vbShortDate) List1.AddItem FormatDateTime(MyDate, vbLongTime) List1.AddItem FormatDateTime(MyDate, vbShortTime) Рис. 6.7 Окно со списком, заполненное форматированными данными с использованием функции FormatDateTime Синтаксис функции FormatNumber следующий: Синтаксис FormatNumber( Expression [, NumDigitsAfterDecimal [, IncludeLeadingDigit [, UseParensForNegativeNumbers [, GroupDigits ]]]]) Здесь аргументы означают то же, что и в функции FormatCurrency.
В качестве примера приведем фрагмент кода и результат его работы (рис. 6.8) в виде окна списка. Dim MyDouble As Double MyDouble = 112233.4455 List1.AddItem FormatNumber(MyDouble) List1.AddItem FormatNumber(MyDouble, vbFalse) List1.AddItem FormatNumber(MyDouble, vbTrue) List1.AddItem FormatNumber(MyDouble,, vbFalse) List1.AddItem FormatNumber(MyDouble,, vbTrue) List1.AddItem FormatNumber(MyDouble,,, vbFalse)
Рис. 6.8 Окно со списком, заполненное форматированными данными с использованием функции FormatNumber Синтаксис функции FormatPercent следующий: Синтаксис FormatPercent ( Expression [, NumDigitsAfterDecimal [, IncludeLeadingDigit [, UseParensForNegativeNumbers [, GroupDigits ]]]]) Здесь аргументы означают то же, что и в функции FormatCurrency. На рис. 6.9 приведена форма в режиме разработки для тестирования функции FormatPercent. Рис. 6.9 Форма в режиме разработки для тестирования функции FormatPercent В следующей таблице приведены свойства элементов управления формы, заданные в режиме разработки.
Код процедуры обработки события «щелчок на кнопке CmdFofmat» из модуля формы этого тестового приложения приведен в листинге 6.2.
Листинг 6.2. Код процедуры обработки события тестового приложения. 1 Private Sub CmdFofmat_Click() 2 Dim IntDigits As Integer 3 Dim BoolIncludeLeadingDigit As Boolean 4 Dim BoolUseParensForNegativeNumbers As Boolean 5 Dim BoolGroupDigits As Boolean 7 IntDigits = Text3.Text 8 BoolIncludeLeadingDigit = chIncludeLeadingDigit.Value 9 BoolUseParensForNegativeNumbers = _ 10 chUseParensForNegativeNumbers.Value 11 BoolGroupDigits = chGroupDigits.Value 13 TxtOutput.Text = FormatPercent(Val(TxtInput.Text), _ 14 IntDigits, _ 15 BoolIncludeLeadingDigit, _ 16 BoolUseParensForNegativeNumbers, _ 17 BoolGroupDigits) 18 End Sub На рис. 6.10 показана тестовая форма в режиме исполнения. Теперь можно вводить данные в текстовые окна и выбирать необходимые параметры в секции Параметры форматирования, изменяя таким образом аргументы функции FormatPercent. Рис. 6.10 Форма в режиме исполнения для тестирования функции FormatPercent
|