Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается форматирование строк в right-Justify при вызове печати приложения.
Исходная версия продукта: Visual Basic
Исходный номер базы знаний: 217012
Итоги
Существует несколько различных способов правильного обоснования строк с помощью функции Format:
@Используйте символ.Использовать функцию
RSet.Используйте обходные пути с функцией
Format$.
Использование символа @
Примечание.
Этот метод действует только с monospace шрифтами, такими как Courier New.
Отформатируйте число в строку с числовыми символами преобразования, например $##0.00.
Отформатируйте результируемую строку со строкой формата, состоящей из числа символов, равных длине требуемого формата, например @@@@@@@.
Следующий пример кода форматирует несколько чисел с помощью семи символов и семи символьного формата $#0.00.
Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"
Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"
Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"
Выходные данные:
| $1.50|
| $12.50|
|$123.50|
Использование функции RSet
При использовании в сочетании RSetс функцией форматирования работает в строках фиксированной длины. В следующем примере кода показано использование RSet:
x = (Format$(123.5, "$##0.00"))
Print "x" & x & "x"
RSet x = (Format$(1.5, "$##0.00"))
Print "x" & x & "x"
Результат выглядит так:
x$123.50x
x $1.50x
Обходные пути с помощью функции Format$
Примечание.
Эти методы эффективны только с monospace шрифтами, такими как Courier New.
Функция Format$ не поддерживает правильные строки при использовании с символом #. Первый пример кода использует функцию Len, чтобы определить, сколько пробелов необходимо добавить слева от строки, представляющей число, чтобы справа оправдать строку:
required = 8 ' longest number expected
a = 1.23
b = 44.56
num1$ = Format$(a, "#0.00")' this converts the number to a string
num2$ = Format$(b, "#0.00")' with 2 decimal places and a leading zero
'Debug.Print num2$
If (required - Len(num1$)) > 0 Then
num1$ = Space$(required - Len(num1$)) + num1$
End If
If (required - Len(num2$)) > 0 Then
num2$ = Space$(required - Len(num2$)) + num2$
End If
' test output
Print num1$
Print num2$
Результат выглядит так:
1.23
44.56
Второй пример Format$ перепечатается с разрешением автора Карла Питерсона. Его функция LPad использует функцию Right$ :
Private Function LPad(ValIn As Variant, nDec As Integer, _
WidthOut As Integer) As String
'
' Formatting function left pads with spaces, using specified
' number of decimal digits.
'
If IsNumeric(ValIn) Then
If nDec > 0 Then
LPad = Right$(Space$(WidthOut) & _
Format$(ValIn, "0." & String$(nDec, "0")), _
WidthOut)
Else
LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut)
End If
Else
LPad = Right$(Space$(WidthOut) & ValIn, WidthOut)
End If
End Function
Пример с пошаговыми инструкциями
Запустите новый проект VISUAL Basic Standard EXE. Форма1 создается по умолчанию.
Добавьте четыре элемента управления CommandButton в Form1. Поместите их справа от окна формы.
Добавьте следующий код в раздел "Общие объявления" формы 1:
Option Explicit Private Sub Command1_Click() Me.Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|" Me.Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|" Me.Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|" End Sub Private Sub Command2_Click() Dim x As String x = (Format$(123.5, "$##0.00")) Me.Print "x" & x & "x" RSet x = (Format$(1.5, "$##0.00")) Me.Print "x" & x & "x" End Sub Private Sub Command3_Click() Dim required As Integer Dim a As Single Dim b As Single Dim num1$, num2$ required = 8 ' longest number expected a = 1.23 b = 44.56 num1$ = Format$(a, "#0.00")' this converts the number to a string num2$ = Format$(b, "#0.00")' with two decimal places and a leading zero 'Debug.Print num2$ If (required - Len(num1$)) > 0 Then num1$ = Space$(required - Len(num1$)) & num1$ End If If (required - Len(num2$)) > 0 Then num2$ = Space$(required - Len(num2$)) & num2$ End If ' test output Me.Print num1$ Me.Print num2$ End Sub Private Sub Command4_Click() Dim xstring As String xstring = LPad(2.3, 2, 7) Me.Print "K" & xstring & "K" End Sub Private Sub Form_Load() Command1.Caption = "@" Command1.Font.Size = 18 Command2.Caption = "Rset" Command3.Caption = "Format$" Command4.Caption = "VBPJ" Me.Font.Name = "Courier New" End Sub Private Function LPad(ValIn As Variant, nDec As Integer, _ WidthOut As Integer) As String ' ' Formatting function left pads with spaces, using specified ' number of decimal digits. ' If IsNumeric(ValIn) Then If nDec > 0 Then LPad = Right$(Space$(WidthOut) & _ Format$(ValIn, "0." & String$(nDec, "0")), _ WidthOut) Else LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut) End If Else LPad = Right$(Space$(WidthOut) & ValIn, WidthOut) End If End FunctionЗапустите программу, нажмите кнопки команды и просмотрите результаты.