Freigeben über


Formatieren von Zeichenfolgen nach rechtsbündig, wenn eine Anwendung druckt

In diesem Artikel wird das Formatieren von Zeichenfolgen nach rechtsbündig erläutert, wenn eine Anwendung das Drucken aufruft.

Originalproduktversion: Visual Basic
Ursprüngliche KB-Nummer: 217012

Zusammenfassung

Es gibt verschiedene Möglichkeiten, Zeichenfolgen mit der Format-Funktion nach rechts zu rechtfertigen:

  • Verwenden Sie das @ Zeichen.

  • Sie verwenden die Funktion RSet.

  • Verwenden Sie Problemumgehungen mit der Format$ Funktion.

Verwenden des @-Zeichens

Notiz

Diese Technik ist nur bei monospace Schriftarten wirksam, z Courier New. B. .

  1. Formatieren Sie die Zahl in eine Zeichenfolge mit numerischen Konvertierungszeichen, z. B. $##0,00.

  2. Formatieren Sie die resultierende Zeichenfolge mit einer Formatzeichenfolge, die aus einer Anzahl von @ Zeichen besteht, die der Länge des gewünschten Formats entsprechen, z. B. @@@@@@@.

Im folgenden Codebeispiel werden mehrere Zahlen mit sieben @ Zeichen und einem sieben Zeichenformat ( $##0,00) formatiert.

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

Die Ausgabe lautet;

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

Verwenden der RSet-Funktion

Bei Verwendung in Verbindung mit RSetder Formatfunktion funktioniert die Formatfunktion für Zeichenfolgen mit fester Länge. Das folgende Codebeispiel veranschaulicht die Verwendung von RSet:

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

Die Ausgabe lautet:

x$123.50x 
x $1.50x

Problemumgehungen mit der Format$-Funktion

Notiz

Diese Techniken sind nur mit monospace Schriftarten effektiv, z Courier New. B. .

Die Format$-Funktion rechtfertigt keine Zeichenfolgen, wenn sie mit dem Symbol "#" verwendet werden. Im ersten Codebeispiel wird die Funktion Len verwendet, um zu bestimmen, wie viele Leerzeichen links neben der Zeichenfolge hinzugefügt werden müssen, die die Zahl darstellt, um die Zeichenfolge nach rechts zu rechtfertigen:

 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$

Die Ausgabe lautet:

 1.23
44.56

Das zweite Format$-Beispiel wird mit der Erlaubnis des Autors Karl Peterson gedruckt. Seine LPad-Funktion verwendet die Right$-Funktion:

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

Schritt-für-Schritt-Beispiel

  1. Starten Sie ein neues Exe-Projekt von Visual Basic Standard. Formular1 wird standardmäßig erstellt.

  2. Fügen Sie vier CommandButton-Steuerelemente zu Form1 hinzu. Positionieren Sie sie ganz rechts im Formularfenster.

  3. Fügen Sie den folgenden Code zum Abschnitt "Allgemeine Deklarationen" von Form1 hinzu:

    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. Führen Sie das Programm aus, klicken Sie auf die Befehlsschaltflächen, und beobachten Sie die Ergebnisse.