Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB2008] ja tekstirivin jakaminen

AimoKulaus [20.12.2008 20:07:09]

#

Taannoin tuli eteen ongelma, miten saada oheisesta rimssusta haettua nuo lukemat erilleen eri muuttujiin. Kiire kun oli, niin tein homman valmiiksi wanhalla kunnon Instr ja/tai IndexOf systeemillä, mutta tulihan siitä hieman sekavan näköinen...

Mutta mitäpä arvon raati suosittaa paremmaksi ja selkeämmäksi menetelmäksi?

Ja tässä esimerkki lukemista. Lukujen numeroiden määrä vaihtelee, ja ne voivat olla myös negatiivisia.

nro=1 ce=(62.764086, 31.03189) ne=(62.768033, 31.041140) sw=(62.759971, 31.018867) zoom=16

AimoKulaus [23.12.2008 18:38:24]

#

Tutkailin Split-funktiota, ja rivimäärä väheni huomattavasti.
Formille yksi button, ja sille koodi:

.
Dim litania As String = "nro=1 ce=(62.764086, 31.03189) ne=(62.768033, 31.041140) sw=(62.759971, 31.018867) zoom=16"
Dim erottimet() As Char = {" "c, ","c, "="c, "("c, ")"c}
Dim temp() As String
Dim numero, zoom As Integer ' Näissä lopuksi lukemat
Dim celat, celon, nelat, nelon, swlat, swlon As Single ' Näissä lopuksi lukemat
Dim i As Integer

temp = litania.Split(erottimet, StringSplitOptions.RemoveEmptyEntries)

For i = 0 To temp.GetUpperBound(0)
    If temp(i) = "nro" Then
        numero = Val(temp(i + 1))
    End If
    If temp(i) = "zoom" Then
        zoom = Val(temp(i + 1))
    End If
    If temp(i) = "ce" Then
        celat = Val(temp(i + 1))
        celon = Val(temp(i + 2))
    End If
    If temp(i) = "ne" Then
        nelat = Val(temp(i + 1))
        nelon = Val(temp(i + 2))
    End If
    If temp(i) = "sw" Then
        swlat = Val(temp(i + 1))
        swlon = Val(temp(i + 2))
    End If
Next

'... ohjelma jatkuu ...

Metabolix [24.12.2008 10:32:25]

#

Esimerkiksi säännöllisillä lausekkeilla onnistuu. Jos juuri tämä ei toimi, voit itse korjailla virheet Googlen avulla, hakusana "regex" tai "regular expressions" ja tietenkin "VB.Net".

Imports System.Text.RegularExpressions
' ...
Dim MatchObj As Match = Regex.Match(teksti, _
  "nro=([0-9]+) " & _
  "ce=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _
  "ne=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _
  "sw=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _
  "zoom=([0-9]+)" _
)

numero = Val(MatchObj.Groups(1))
celat = Val(MatchObj.Groups(2))
celon = Val(MatchObj.Groups(3))
' ...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta