Compartir a través de


Dar formato a cadenas a Right-Justify cuando una aplicación llama a la impresión

En este artículo se presenta cómo dar formato a cadenas a 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 cadenas mediante la función Format:

  • Use el @ carácter .

  • Mediante la función RSet.

  • 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. Dé formato a la cadena resultante con una cadena de formato que consta de un número de caracteres @ iguales de longitud 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 la siguiente:

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 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 se deben agregar a la izquierda de la cadena que representa el número, para justificar la cadena a la derecha:

 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 la siguiente:

 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 de Visual Basic Standard. 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.