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
.
Formate o número em uma cadeia de caracteres com caracteres de conversão numérica, por exemplo, $##0.00.
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
Inicie um novo projeto DO VISUAL Basic Standard EXE. O Form1 é criado por padrão.
Adicione quatro controles CommandButton ao Form1. Posicione-os para a extrema direita da janela do formulário.
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
Execute o programa, clique nos botões de comando e observe os resultados.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de