Форматирование строк вправо при вызове печати приложения

В этой статье описывается форматирование строк в right-Justify при вызове печати приложения.

Исходная версия продукта: Visual Basic
Исходный номер базы знаний: 217012

Итоги

Существует несколько различных способов правильного обоснования строк с помощью функции Format:

  • @ Используйте символ.

  • Использовать функцию RSet.

  • Используйте обходные пути с функцией Format$ .

Использование символа @

Примечание.

Этот метод действует только с monospace шрифтами, такими как Courier New.

  1. Отформатируйте число в строку с числовыми символами преобразования, например $##0.00.

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

Следующий пример кода форматирует несколько чисел с помощью семи символов и семи символьного формата $#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

Пример с пошаговыми инструкциями

  1. Запустите новый проект VISUAL Basic Standard EXE. Форма1 создается по умолчанию.

  2. Добавьте четыре элемента управления CommandButton в Form1. Поместите их справа от окна формы.

  3. Добавьте следующий код в раздел "Общие объявления" формы 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
    
  4. Запустите программу, нажмите кнопки команды и просмотрите результаты.