web-dev-qa-db-fra.com

Comment déclarer une chaîne de longueur fixe dans VB.NET?

Comment puis-je déclarer une chaîne comme ceci:

Dim strBuff As String * 256

dans VB.NET?

13
Rachel

Utilisez l'attribut VBFixedString. Voir les infos MSDN ici

<VBFixedString(256)>Dim strBuff As String
6
Spencer Ruport

Cela dépend de ce que vous avez l'intention d'utiliser la chaîne. Si vous l'utilisez pour l'entrée et la sortie de fichier, vous pouvez utiliser un tableau d'octets pour éviter les problèmes d'encodage. Dans vb.net, une chaîne de 256 caractères peut comporter plus de 256 octets.

Dim strBuff(256) as byte

Vous pouvez utiliser le codage pour transférer d'octets en chaîne.

Dim s As String
Dim b(256) As Byte
Dim enc As New System.Text.UTF8Encoding
...
s = enc.GetString(b)

Vous pouvez affecter 256 caractères à un octet à une chaîne si vous devez l’utiliser pour recevoir des données, mais le paramètre transmis peut être différent de vb.net de vb6.

s = New String(" ", 256)

En outre, vous pouvez utiliser vbFixedString. Je ne sais pas exactement ce que cela fait, cependant, car lorsque vous affectez une chaîne de longueur différente à une variable déclarée de cette façon, elle devient la nouvelle longueur.

<VBFixedString(6)> Public s As String
s = "1234567890" ' len(s) is now 10
6
xpda

Pour écrire ce code VB 6:

Dim strBuff As String * 256

Dans VB.Net, vous pouvez utiliser quelque chose comme:

Dim strBuff(256) As Char
3
Dr.Optix

Utilise stringbuilder

'Declaration   
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
2
Prince Waleed

Cet objet peut être défini comme une structure avec un constructeur et deux propriétés.

Public Structure FixedLengthString
     Dim mValue As String
     Dim mSize As Short

     Public Sub New(Size As Integer)
         mSize = Size
         mValue = New String(" ", mSize)
     End Sub

     Public Property Value As String
         Get
             Value = mValue
         End Get

         Set(value As String)
             If value.Length < mSize Then
                 mValue = value & New String(" ", mSize - value.Length)
             Else
                 mValue = value.Substring(0, mSize)
             End If
         End Set
     End Property
 End Structure

https://jdiazo.wordpress.com/2012/01/12/getting-rid-of-vb6-compatibility-references/

1
user3192640

Vous pouvez utiliser Microsoft.VisualBasic.Compatibility:

Imports Microsoft.VisualBasic.Compatibility

Dim strBuff As New VB6.FixedLengthString(256)

Mais il est marqué comme obsolète et spécifiquement pas pris en charge pour les processus 64 bits , écrivez donc votre propre copie qui réplique la fonctionnalité, qui consiste à tronquer lors de la définition de valeurs longues et le remplissage correct avec des espaces pour les valeurs courtes. Il définit également une valeur "non initialisée", comme ci-dessus, sur null.

Exemple de code provenant de LinqPad (que je ne parviens pas à autoriser Imports Microsoft.VisualBasic.Compatibility je pense car il est marqué comme obsolète, mais je n’ai aucune preuve de cela):

Imports Microsoft.VisualBasic.Compatibility

Dim U As New VB6.FixedLengthString(5)
Dim S As New VB6.FixedLengthString(5, "Test")
Dim L As New VB6.FixedLengthString(5, "Testing")
Dim p0 As Func(Of String, String) = Function(st) """" & st.Replace(ChrW(0), "\0") & """"
p0(U.Value).Dump()
p0(S.Value).Dump()
p0(L.Value).Dump()
U.Value = "Test"
p0(U.Value).Dump()
U.Value = "Testing"
p0(U.Value).Dump()

qui a cette sortie:

"\ 0\0\0\0\0"
"Test"
"Testi"
"Test"
"Testi" 

1
Mark Hurd

Essaye ça:

    Dim strbuf As New String("A", 80)

Crée une chaîne de 80 caractères contenant "AAA ...."

Ici, j'ai lu une chaîne de 80 caractères à partir d'un fichier binaire:

    FileGet(1,strbuf)

lit 80 caractères dans strbuf ...

0
Gawie