2016-11-01 162 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,'_') 

,如果這是你在找什麼不超過對不起,原諒我的英語不好。

由於