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 RSet funció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.

  1. Dé formato al número en una cadena con caracteres de conversión numéricos, por ejemplo, $##0.00.

  2. 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

  1. Inicie un nuevo proyecto exe Visual Basic estándar. Form1 se crea de forma predeterminada.

  2. Agregue cuatro controles CommandButton a Form1. Colóquelos en el extremo derecho de la ventana de formulario.

  3. 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 Function
    
  4. Ejecute el programa, haga clic en los botones de comando y observe los resultados.