1

我有一个固定长度的字符串变量:

<VBFixedString(10)>
Public myVar As String

当我将 var 分配给具有 11 个字符的值时,var 会更改长度。

这就是我得到的:

  myvar = "1234567890ABCD" ' result = myvar being "1234567890ABCD"

我想要的是 myvar:“1234567890”

然后如果它小于 10 我想

myvar = "12345" to be "12345     "

我可以用 PadLeft PadRight 做到这一点,但想知道我是否可以将它声明为固定长度,它会为你处理所有这些。

4

2 回答 2

2

据我了解,该VBFixedString属性仅被某些基于文件的方法识别,以帮助构建写入/读取文件的内容。编译器不会将该属性用于其他任何事情,包括更改变量赋值的编译方式。

取自 MSDN:

VBFixedStringAttribute 是信息性的,不能用于将可变长度字符串转换为固定字符串。此属性的目的是修改识别 VBFixedStringAttribute 的方法或 API 调用如何使用结构和非局部变量中的字符串。请记住,此属性不会更改字符串本身的实际长度。

最后一句话很重要:

请记住,此属性不会更改字符串本身的实际长度。

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbfixedstringattribute.aspx

编辑1:

关于如何根据固定长度自动填充字符串的快速示例:

Function FixedLengthString(ByVal value As String, ByVal totalLength As Integer, ByVal padding As Char) As String
        Dim length = value.Length
        If (length > totalLength) Then Return value.Substring(0, totalLength)
        Return value.PadRight(totalLength, padding)
End Function

在这里你可以传入一个字符串,如果字符串的长度大于指定的总长度,你将得到一个匹配该长度的字符串。少一点,你会得到字符串加上填充字符,直到指定的总长度。

这可以通过错误检查来改进,并且可能使该方法成为扩展方法,这样您就不必传递“值”。

于 2013-06-08T07:08:44.537 回答
2

从老派开始,LSET 将完全按照您的要求进行。

 myvar = lset("1234567890ABCD",10)

结果为“1234567890”,而

 myvar = lset("12345",10)

结果为“12345_ _ _” - 抱歉,编辑器将 12345 后的空格替换为下划线

请参阅LSET 的 MSDN 条目

于 2013-06-08T16:08:48.637 回答