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 に答える