2016-11-01 97 views
1

我有一个字符串,我们称它为“S”,它可以是最多8位数的日志,并且我想将它对齐到一个字符串中,然后在一个文本文件中向右8空格(chr(32))VB.NET特定的字符串格式

Ex。 (我把下划线的例子来标记空白。

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 

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

+1

似乎是[String.PadLeft]的作业(https://msdn.microsoft.com/en-us/library/system.string.padleft(V = vs.110)的.aspx )(或PadRight) – Sehnsucht

+1

S.PadLeft(8,“_”c)) –

回答

4

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

要对齐左侧的输入,请使用格式为负的数字

有关详细信息,请参阅控制格式化String.Format在单证方法控制间距

+0

这样,通过负值或正值长度就可以简单地对齐左侧或右侧。 –

5

你让这个方式太复杂:

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

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

1

其他解决方案:

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

(我希望你使用的是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 

现在,你可以创建一个存储过程或只是调用函数的n你想要的字符串值。

这里我想现在你已经创建了功能的东西命名为dbo.leftPAD,只需使用下面的代码在命令行

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

,如果这是你在找什么不超过对不起,原谅我的英语不好。

由于