Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[vb.net] Vreemde IF-constructie

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

  • lennartkocken
  • Registratie: September 2004
  • Laatst online: 25-11 14:07
Ik werk nu met Visual Basic.net 2003, met Option Strict en Explicit beiden op Off.

Ik heb de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
            networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
            Dim clientData As String = Encoding.ASCII.GetString(bytes)
            MsgBox(Encoding.ASCII.GetString(bytes))
            If clientData = "continue" Then
                MsgBox("Doorgaan")
                stream.Write(filedata, 0, file.Length)
            Else
                MsgBox(clientData)
            End If


bij de eerste msgbox krijg ik "continue", en bij de else-msgbox krijg ik "continue", maar waarom de voorwaarde niet TRUE geeft ontgaat me... iemand een idee?

offtopic:
Ben zo bang dat het iets heel doms is

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Case sensitive? Spaties of andere 'onzichtbare' tekens in de string zoals een CrLf, tabs, spaties, nul-bytes, terminators, dat soort zaken?
Probeer eens iets van MsgBox("[" & clientData & "]") of nog beter, controleer gewoon even de ascii-waardes en/of de lengte van de string. En als je case-insensitive wil comparen gebruik dan String.Compare(StringA, StringB, True) of Option Compare Text.

[ Voor 19% gewijzigd door RobIII op 06-10-2007 00:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:16

gorgi_19

Kruimeltjes zijn weer op :9

En waarom heb je option strict en explicit beiden op off staan? Dat is vragen om problemen. Voor debuggen kan je verder nog tracing en / of debug classes gebruiken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Messageboxen moet je toch vergelijken met DialogResult?

Going for adventure, lots of sun and a convertible! | GMT-8


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Ben geen exper in vb, kan zijn dat het daarbij anders is, maar

code:
1
If clientData = "continue" Then


heeft een enkele = - in de meeste programmeertalen (muv Pascal en nog wat anderen) is de enkele = de Assignment, en niet de vergelijker. == moet het dan zijn.

Maarja, voor hetzelfde is vb anders - ik weet niet.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Nee YopY, '=' is itt tot andere talen geen assignment als het in een if conditie staat. ;)

{signature}


  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

Van een netwerkstream?
zet eens msgbox(clientData.length) en tel eens of het er 8 (continue) zijn ;)
99% dat er een null achter staat of een enter

en zet eens een breakpoint (in de codeview naast de regel code op de grijze balk links klikken)

[ Voor 26% gewijzigd door ? ? op 06-10-2007 10:47 ]


  • lennartkocken
  • Registratie: September 2004
  • Laatst online: 25-11 14:07
era.zer schreef op zaterdag 06 oktober 2007 @ 10:44:
Van een netwerkstream?
zet eens msgbox(clientData.length) en tel eens of het er 8 (continue) zijn ;)
99% dat er een null achter staat of een enter

en zet eens een breakpoint (in de codeview naast de regel code op de grijze balk links klikken)
8193 :P hij heeft dus heel de array gevuld tot aan 8194 bytes, ... hoe controleer of dan of de eerste 8 bytes "continue" bevatten?
Visual Basic:
1
2
3
4
5
6
            For i As Integer = 0 To 7
                If check(i) <> bytes(i) Then
                    ch = False
                    Exit For
                End If
            Next i


zo :P

[ Voor 18% gewijzigd door lennartkocken op 06-10-2007 15:51 ]


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
wat ik in vb6 altijd deed is de functie trim(string) gebruiken bij dit soort problemen, om spaties e.d. weg te halen.

dus misschien dat dit beter helpt, laat anders Encoding.ASCII.GetString(bytes) eens outputten naar een tekst bestand en kijken wat er omheen zit

Veranderde code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 
            Dim clientData As String = Encoding.ASCII.GetString(bytes) 
            MsgBox(Encoding.ASCII.GetString(bytes)) 
'//jaja veranderingen op de volgende regel
            If Trim(clientData) = "continue" Then 
                MsgBox("Doorgaan") 
                stream.Write(filedata, 0, file.Length) 
            Else 
                MsgBox(clientData) 
            End If


oh btw: visual basic is over het algemeen niet case-sensitive itt C# e.d., en inderdaad is de '=" in een if contructie bij visual basic een get en geen set. :)
(is bij VB ook niet nodig itt C#:)

[ Voor 11% gewijzigd door roy-t op 06-10-2007 17:37 ]

~ Mijn prog blog!

Pagina: 1