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,'_')
如果这不是您想要的,请原谅我的英语不好。
谢谢
我有一个字符串,我们称它为 "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,'_')
如果这不是您想要的,请原谅我的英语不好。
谢谢