Buffer vide !

Résolu
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 1 août 2007 - 29 mars 2007 à 12:43
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 29 mars 2007 à 15:46
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

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
29 mars 2007 à 14:52
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
3
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
29 mars 2007 à 14:09
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
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 1 août 2007
29 mars 2007 à 14:41
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mars 2007 à 14:55
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mars 2007 à 15:25
perso, violent_ken, je ferai le contraire...
virer les \0 puis les espaces...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
29 mars 2007 à 15:46
Violent Ken



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



Hex Editor VB
0
Rejoignez-nous