Formatar cadeias de caracteres para Right-Justify quando um aplicativo chama a impressão

Este artigo apresenta como formatar cadeias de caracteres para Right-Justify quando um aplicativo chama a impressão.

Versão original do produto: Visual Basic
Número de KB original: 217012

Resumo

Há várias maneiras diferentes de justificar corretamente cadeias de caracteres usando a função Formatar:

  • Use o @ caractere.

  • Use a RSet função.

  • Use soluções alternativas com a Format$ função.

Usando o caractere @

Observação

Essa técnica só é eficaz com monospace fontes, como Courier New.

  1. Formate o número em uma cadeia de caracteres com caracteres de conversão numérica, por exemplo, $##0.00.

  2. Formate a cadeia de caracteres resultante com uma cadeia de caracteres de formato que consiste em um número de caracteres @ iguais em comprimento ao formato desejado, por exemplo, @@@@@@@.

O exemplo de código a seguir formata vários números usando sete caracteres @ e um formato de sete caracteres, $##0.00.

 Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"
 Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"
 Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"

A saída é;

|  $1.50|
| $12.50|
|$123.50|

Usando a função RSet

Quando usada em conjunto com RSet, a função de formato funciona em cadeias de caracteres de comprimento fixo. O exemplo de código a seguir ilustra o uso de RSet:

 x = (Format$(123.5, "$##0.00"))
 Print "x" & x & "x"
 RSet x = (Format$(1.5, "$##0.00"))
 Print "x" & x & "x"

A saída é:

x$123.50x 
x $1.50x

Soluções alternativas usando a função Format$

Observação

Essas técnicas só são eficazes com monospace fontes, como Courier New.

A função Format$ não justifica corretamente as cadeias de caracteres quando usada com o símbolo #. O primeiro exemplo de código usa a função Len para determinar quantos espaços precisam ser adicionados à esquerda da cadeia de caracteres que representa o número, a fim de justificar a cadeia de caracteres:

 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$

A saída é:

 1.23
44.56

O segundo exemplo format$ é reimpresso com a permissão de seu autor, Karl Peterson. Sua função LPad usa a função 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

Exemplo passo a passo

  1. Inicie um novo projeto DO VISUAL Basic Standard EXE. O Form1 é criado por padrão.

  2. Adicione quatro controles CommandButton ao Form1. Posicione-os para a extrema direita da janela do formulário.

  3. Adicione o seguinte código à seção Declarações Gerais do Formulário1:

    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. Execute o programa, clique nos botões de comando e observe os resultados.