VB.NET 特定的字符串格式

VB.NET specific string formatting

我有一个字符串,我们称它为 "S",它最多可以是 8 位日志,我想将它在一个字符串中对齐,然后在一个文本文件中以 8 个空格向右对齐(字符(32))

例如。 ( 我在例子中加了下划线来标​​记空白。

S="1234"    should result in "____1234"
S="444444"  should result in "__444444"
S="abc"     should result in "_____abc"

为此,我将编写以下代码

Public Function feld(ByVal S As String, Optional I As Integer = 8) As String
    Dim lenS As Integer = Strings.Len(S)
    Dim vorS As Integer = I - lenS
    Dim rez As String = ""
    For x = 1 To vorS
        rez += Strings.Chr(32)
    Next
    rez += S
    Return rez
End Function

有没有更优雅的方法来做到这一点?

您可以使用 String.Format("{0,8}", s) 将包含 8 个字符的结果右侧的输入字符串对齐。

要在左侧对齐输入,请在格式中使用负数。

有关详细信息,请参阅 String.Format 方法文档中的 控制格式 控制间距

你让这个方式太复杂了:

Public Function feld(ByVal S As String, Optional I As Integer = 8) As String
    Return S.PadLeft(I)
End Function

有人想知道为什么你甚至需要一个新函数,除非你想要不同于 PadLeft() 在字符串太长的情况下使用的行为......但如果是这样的话,我们需要知道你在问题中想要什么行为。

其他解决方案:

Public Function AddBlanks(ByVal S As String, Optional L As Integer = 8) As String
    return Microsoft.VisualBasic.Right(StrDup(L, " ") & S, L)
End Function

(我希望你正在使用 SQL,如果不只是避免这种情况的话)

如果你在 SQL 创建标量函数时这样做会更容易,你只需要左对齐所以我做的是(下面只是执行有例子,去创建函数使用下面代码):

DECLARE @StringValue varchar(8)='123'
DECLARE @totalStringLength As Integer=8
DECLARE @ReplaceChar As char(1)='_'

DECLARE @stringLength As int
DECLARE @NewString As varchar(8)
DECLARE @ResultVal As varchar(8)

SET @stringLength = LEN(ISNULL(@StringValue,@ReplaceChar))
IF @stringLength >= @totalStringLength 
Begin
    SET @ResultVal = @StringValue
End
Else
Begin
SET @NewString = REPLICATE(@ReplaceChar, @totalStringLength - @stringLength) + ISNULL(@StringValue, @ReplaceChar)
    SET @ResultVal = @NewString
End
select @ResultVal

现在,您可以创建一个存储过程或只调用您希望字符串值所在的函数。

这里我假设你现在已经创建了一个名为 dbo.leftPAD 的函数,只需在命令行中使用下面的代码

select dbo.leftpad(string.text,8,'_')

如果这不是您想要的,请原谅我的英语不好。

谢谢