Springen naar inhoud


- - - - -
VS 2012

Spatie Herkennen

Visual Basic 2012

  • Log in a.u.b. om te beantwoorden
Er zijn 5 reacties in dit onderwerp

#1 ludo64

ludo64

    Rookie Developer

  • Leden
  • Pip
  • 30 berichten
    Laatst bezocht 25 jul 2019 15:42
  • LocatieTongeren

Geplaatst op 05 juli 2019 - 13:55

Om moedeloos van te worden.
50 Amerikaanse staten waarvan een 10-tal uit twee woorden bestaat.
Dit aantal (10) moet dan in een textbox komen.
Mijn uitkomst is altijd 1.
Visual Basic Code:
Private Sub btnDetermine_Click(sender As Object, e As EventArgs) Handles btnDetermine.Click
Dim states As New List(Of String)(
{
"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut",
"Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas",
"Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi",
"Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island",
"South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington",
"West Virginia", "Wisconsin", "Wyoming"
})

lstStates.DataSource = states

Dim space As Integer
Dim nr As Integer = 0


space = states.IndexOf(" ")
If CBool(states.IndexOf(" ")) Then
nr += 1
End If

txtNumberStates.Text = CStr(nr)
End Sub


#2 Gwen

Gwen

    Starting Developer

  • Leden
  • 25 berichten
    Laatst bezocht 04 aug 2019 13:50

Geplaatst op 06 juli 2019 - 16:09

Dag Ludo,

Je voert de code om de staat in de textbox te plaatsen maar 1x uit.
Een lus zal noodzakelijk zijn om het aantal staten met een spatie op te tellen.

#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1163 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 juli 2019 - 21:37

Bericht bekijkenludo64, op 05 juli 2019 - 13:55, zei:

Om moedeloos van te worden.
50 Amerikaanse staten waarvan een 10-tal uit twee woorden bestaat.
Dit aantal (10) moet dan in een textbox komen.
Mijn uitkomst is altijd 1.

Er zijn wel wat dingen fout, volg mee:
Visual Basic Code:
space = states.IndexOf(" ")


space is  -1.
Uitleg: states.IndexOf(" ") zoekt naar een element in states waarvan de waarde een string is die bestaat uit 1 spatie (dus " ").
Die waarde wordt niet gevonden, dus geeft IndexOf() de integer waarde -1 terug.

Visual Basic Code:
CBool(states.IndexOf(" "))

Is True.
Uitleg: CBool converteert de integer waarde 0 naar False en alle andere waarden naar True.
Dus i.p.v. te converteren moet je de waarde space (uit IndexOf()) vergelijken met -1, niet converteren.

Je moet niet alleen niet in de collectie states zoeken naar een string bestaande uit 1 spatie, je moet in een state (string) zoeken naar het karakter spatie.
states
Noteer dat een string en een karakter in VB.NET anders worden genoteerd:
Visual Basic Code:
Dim eenString As  String = " "
Dim eenKarakter As Char = " "c

Dus in een string een karakter zoeken doe je met state.IndexOf(" "c), als je een string in een string wil zoeken is het state.IndexOf(" ").
Dus je bovenstaande code zou kunnen worden:
Visual Basic Code:
		Dim aantalMetEenSpatie As Integer = 0
		For Each state In states
			If state.IndexOf(" "c) <> -1 Then
				aantalMetEenSpatie += 1
			End If
		Next
		TextBoxAantal.Text = aantalMetEenSpatie.ToString


Maar als je gewoon wil kijken of een spatie voorkomt in een string, en je niet geïnteresseerd bent in de eerste positie (wat IndexOf zoekt), dan gebruik je betere String.Contains:

Visual Basic Code:
		Dim aantalMetEenSpatie As Integer = 0
		For Each state In states
			If state.Contains(" "c) Then
				aantalMetEenSpatie += 1
			End If
		Next
		TextBoxAantal.Text = aantalMetEenSpatie.ToString



En natuurlijk kan het ook zonder de loop met Linq:
Visual Basic Code:
	TextBoxAantal.Text = states.Count(Function(s) s.Contains(" "c)).ToString



#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1163 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 juli 2019 - 21:40

Bericht bekijkenGwen, op 06 juli 2019 - 16:09, zei:

Een lus zal noodzakelijk zijn om het aantal staten met een spatie op te tellen.
Zijn code zoekt al niet naar een staat met een spatie in, maar naar een staat waarvan de naam een spatie is.
Niet echt een handige naam. :D

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1163 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 07 juli 2019 - 17:52

 ludo64, op 05 juli 2019 - 13:55, zei:

Om moedeloos van te worden.
Programmeren vraagt (heel veel) tijd en volharding. :D

#6 ludo64

ludo64

    Rookie Developer

  • Leden
  • Pip
  • 30 berichten
    Laatst bezocht 25 jul 2019 15:42
  • LocatieTongeren

Geplaatst op 07 juli 2019 - 19:21

Dirk en Gwen, bedankt voor jullie reacties en heldere uitleg.
Weeral iets bijgeleerd.





Ook met taq VS 2012, Visual Basic 2012 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2012] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)