Dar formato a las cadenas para Right-Justify cuando una aplicación llama a la impresión
En este artículo se presenta cómo dar formato a las cadenas para Right-Justify cuando una aplicación llama a la impresión.
Versión original del producto: Visual Basic
Número de KB original: 217012
Resumen
Hay varias maneras diferentes de justificar correctamente las cadenas mediante la función Format:
Use el
@carácter .Use la
RSetfunción .Use soluciones alternativas con la
Format$función .
Usar el carácter @
Nota
Esta técnica solo es eficaz con monospace fuentes, como Courier New.
Dé formato al número en una cadena con caracteres de conversión numéricos, por ejemplo, $##0.00.
Dar formato a la cadena resultante con una cadena de formato que consta de un número de caracteres @ de longitud igual al formato deseado, por ejemplo, @@@@@@@.
El ejemplo de código siguiente da formato a varios números con siete caracteres @ y un formato de siete caracteres, $##0.00.
Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"
Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"
Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"
La salida es ;
| $1.50|
| $12.50|
|$123.50|
Uso de la función RSet
Cuando se usa junto con RSet, la función de formato funciona en cadenas de longitud fija. En el ejemplo de código siguiente se muestra el uso de RSet:
x = (Format$(123.5, "$##0.00"))
Print "x" & x & "x"
RSet x = (Format$(1.5, "$##0.00"))
Print "x" & x & "x"
La salida es:
x$123.50x
x $1.50x
Soluciones alternativas mediante la función Format$
Nota
Estas técnicas solo son eficaces con monospace fuentes, como Courier New.
La función Format$ no justifica correctamente las cadenas cuando se usa con el símbolo # . El primer ejemplo de código usa la función Len para determinar cuántos espacios deben agregarse a la izquierda de la cadena que representa el número, con el fin de justificar a la derecha la cadena:
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$
La salida es:
1.23
44.56
El segundo ejemplo format$ se vuelve a imprimir con el permiso de su autor, Karl Peterson. Su función LPad usa la función 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
Ejemplo paso a paso
Inicie un nuevo proyecto exe Visual Basic estándar. Form1 se crea de forma predeterminada.
Agregue cuatro controles CommandButton a Form1. Colóquelos en el extremo derecho de la ventana de formulario.
Agregue el código siguiente a la sección Declaraciones generales de Form1:
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 FunctionEjecute el programa, haga clic en los botones de comando y observe los resultados.