Buffer vide ! [Résolu]

Signaler
Messages postés
61
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
1 août 2007
-
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Je récupère des données aléatoires dans une variable buffer.
Je la déclare en Dim Buffer As String * 1024, mais quand je ne reçois rien, dans ce code suivant qui me permet de rechercher un mot dans une autre chaine, ça me fait une erreur du type run-time error 5 :
Public Function word(ByVal answer As String, ByVal a As String, ByVal b As String) As String
    P = InStr(answer, a)
    v = Mid(answer, P + Len(a))
    P = InStr(v, b)
    word = Trim(Mid(v, 1, P - 1))    'ici l'erreur
End Function

answer est vide : "1024 petits carrés"
Comment dire qu'une variable est vide ?

Aussi, dans la déclaration au départ : *1024, si je ne l'a met pas, ça plante.
Après je suis obligé de tronquer ce qui est lu.
Ya pas un moment de déclarer la longueur du buffer de ce qui est effectivement reçu (sachant que la réponse reçue se termine toujours par un vbCrLf), et pas d'imposer au départ 1024 ou autre chose ?

6 réponses

Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Violent Ken



1)



Private Sub
Form_Load()
Dim sBuf As String * 1024
Dim s2 As String

   sBuf = "Début de la string"
   s2 = Trim$(sBuf)    'vire les espaces inutiles en cas de réaffectation de la valeur
   
   'vire les &H0 en fin de ligne si existants
   If InStr(s2, vbNullChar) Then s2 = Left$(s2, InStr(s2, vbNullChar) - 1)
   
   MsgBox s2 & "   taille=" & Str$(Len(s2))
End Sub ,

----

Hex Editor VB
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Violent Ken

 


Salut,

-"1024 petits carrés" ==> en déclarant en String*1024, tu forces la string à faire obligatoirement 1024 de longueur. Par défaut, ce sont des bytes &H0 (représentés par des carrés car inaffichables) qui constituent la string.

- pour virer les "petits carrés inutiles" de ta string,



Dim
sBuf As String * 1024
Dim s2 As String
s2 = Left$(sBuf, InStr(sBuf, vbNullChar) - 1),

----

By Renfield

@+Hex Editor VB
Messages postés
61
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
1 août 2007

s2 = Left$(sBuf, InStr(sBuf, vbNullChar) - 1 ) enlève les "petits carrés", mais laisse du vide (ou des espaces ?), donc il y reste toujours 1024 caractères...


p = InStr(v, b)
 If p Then word = Trim(Mid(v, 1, p - 1))    'ici l'erreur
en rajoutant if et then, ça ne change rien, je ne comprend pas où tu veux en venir ?

Merci pour ton aide.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
ta fonction, je crois, extraies une chaine de 'Answer', placée entre les chaines 'a' et 'b'...

comment (d'où) récupères tu ce Buffer...?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
perso, violent_ken, je ferai le contraire...
virer les \0 puis les espaces...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Violent Ken



Oui, c'est pas faux...
@+



Hex Editor VB